在我的應用程序中,我要檢查是否在NSDictionary
的數組中有另一個NSDictionary
。換句話說,我製作了一個JSON文件,我將其存儲在文檔中。
現在我解析這個JSON來插入一個新條目,然後在我的JSON中插入這個條目之前,我需要檢查它的條目是否已經存儲在我的文件中。我解析JSON這樣:檢查一個NSDictionary數組是否包含一個NSDictionary
// First I read the JSON file from the folder Documents
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"data.json"];
NSString *content = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];
NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dictContent = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
// Json parsing
NSMutableArray *array = [[NSMutableArray alloc]init];
NSMutableArray *arrayOfDictData = [[NSMutableArray alloc]init];
if (dictContent) {
NSDictionary *sites = [dictContent objectForKey:@"sites"];
NSArray *site = [sites objectForKey:@"site"];
array = [site mutableCopy];
}
然後我有另一個NSDictionary
(dictForJson
),其中我插入從HTML網站解析數據,所以現在我需要檢查,如果在字典中dictForJson
的數據仍然在JSON文件。
我該如何檢查?
的dictForJson具有這樣的結構:
dictForJson = @{@"name": htmlTitle,
@"src": path,
@"expiryDate": expireDate};
的NSArray的網站上有這樣的結構:
site: (
{
expiryDate = "29 Ago 2013";
name = Sito4;
src = "/Users/redoddity/Library/Application Support/iPhone Simulator/6.1/Applications/2D9EBE71-4365-448D-8AD2-A08749B8DBC1/Documents/Sito4.html";
}
)
你有什麼想法? 我試圖與[array containsObject:dictForJson]
,但NSDictionary的不排序,所以當我用這個方法有時會返回0,其他時間返回1 也許是有用我建立我的JSON用下面的代碼:
- (void)JsonCreateOrEdit {
NSDictionary *dictSites = [[NSDictionary alloc]init];
NSDictionary *dictSite = [[NSDictionary alloc]init];
NSMutableArray *site = [[NSMutableArray alloc]init];
NSDictionary *dictForJson = [[NSDictionary alloc]init];
dictForJson = @{@"name": htmlTitle,
@"src": path,
@"expiryDate": expireDate};
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"data.json"];
BOOL fileExist = [[NSFileManager defaultManager] fileExistsAtPath:filePath];
if (!fileExist) {
[site addObject:dictForJson];
dictSite = @{@"site": site};
dictSites = @{@"sites": dictSite};
// Creo il file Json
NSLog(@"Il file non esiste");
SBJsonWriter *writer = [[SBJsonWriter alloc]init];
NSString *jsonCommand = [writer stringWithObject:dictSites];
[CreateFile createFileIn:documentsPath with:@"data.json" andData:jsonCommand]; // This is a class method I made to create the file
else {
// Here there are the instructions to update the file data.json
NSLog(@"Il file esiste");
// Leggo il file json
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"data.json"];
NSString *content = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];
NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dictContent = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
// Faccio il parsing del json
NSMutableArray *array = [[NSMutableArray alloc]init];
NSMutableArray *arrayOfDictData = [[NSMutableArray alloc]init];
if (dictContent) {
NSDictionary *sites = [dictContent objectForKey:@"sites"];
NSArray *site = [sites objectForKey:@"site"];
array = [site mutableCopy];
// Here I must check if in the array site there are the same information I'm trying to insert
}
}
嘗試NSPredicate..this可能會解決您的問題。 –
好的,我可以用NSPredicate做什麼?我從來沒有用過它。 – lucgian84
聽起來像你應該檢查包含相同的鍵和值的字典是否存在。謂詞是一種方法。您還可以先比較鍵和鍵的值。但是你只需要真正確定最簡單的鍵值組合,這些組合將是唯一的。 – uchuugaka