首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查NSDictionary数组是否包含NSDictionary

检查NSDictionary数组是否包含NSDictionary
EN

Stack Overflow用户
提问于 2013-07-31 13:46:33
回答 2查看 3.9K关注 0票数 2

在我的应用程序中,我必须检查NSDictionary数组中是否有另一个NSDictionary。换句话说,我创建了一个JSON文件,并将其存储在Documents中。

现在,我正在解析这个JSON以插入一个新条目,在将这个条目插入我的JSON之前,我需要检查它是否已经存储在我的文件中。我解析了JSON,所以:

代码语言:javascript
复制
// 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具有这样的结构:

代码语言:javascript
复制
dictForJson = @{@"name": htmlTitle,
                    @"src": path,
                    @"expiryDate": expireDate};

NSArray站点具有以下结构:

代码语言:javascript
复制
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:

代码语言:javascript
复制
- (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
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-31 14:48:12

我做到了!:)我做到了:

代码语言:javascript
复制
{
        // Aggiorno il file
        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"];
            NSDictionary *dict = [site objectAtIndex:0];
            NSLog(@"dictForJson = %@\ndict = %@", dictForJson, dict);
            NSString *name = [dict objectForKey:@"name"];
            NSLog(@"name: %@", name);
            array = [site mutableCopy];

        }

而且起作用了!谢谢你给我时间!

票数 0
EN

Stack Overflow用户

发布于 2013-07-31 14:09:02

代码语言:javascript
复制
NSPredicate *aPredicate = [NSPredicate predicateWithFormat:@"%K LIKE[c] %@", @"name", @"htmlTitle"];
NSArray *theFilteredArray = [mainArrayOfDictionry filteredArrayUsingPredicate:aPredicate];

if ([theFilteredArray count]){
    NSLog(@"Dictionay Exists");
}else{
     NSLog(@"Dictionay does not Exists");
}

在第一个语句中,第一个参数是"Key“,第二个参数是dictionay的实际值。

,我假设如下:

代码语言:javascript
复制
NSDictionary *dictForJson = @{@"name": htmlTitle,
                    @"src": path,
                    @"expiryDate": expireDate};


NSArray *mainArrayOfDictionry = (

"dictForJson" : @{@"name": htmlTitle,
                    @"src": path,
                    @"expiryDate": expireDate};
),
(),
(),
(),
.
.
.
)

*希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17972199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档