需要帮助解析iPhone的json

时间:2011-05-17 21:48:21

标签: iphone objective-c json cocoa-touch sbjson

我想在我的iphone应用程序中解析JSON文件。问题是我可以解析简单的json文件,但我很困惑如何解析以下类型的json:

[{"123":  
  [{ "item_id":"222",  
     "image_count":"2",  
     "image_filetype":".jpg",  
     "image_url":"http:\/\/someurl.jpg",  
  },  
  {"item_id":"333",  
     "image_count":"2",  
     "image_filetype":".jpg",  
     "image_url":"http:\/\/someurl.jpg",  
  }]  
}]  

有些人可以帮助我如何提取所有img_urls为“123”。

谢谢。

5 个答案:

答案 0 :(得分:3)

NSString *jsonString = …;

// The top-level object is an array
NSArray *array = [jsonString JSONValue];

// The first element in the array is an object containing a name-value
// pair for the key/name "123". The value is itself an array
NSArray *itemsIn123 = [[array objectAtIndex:0] objectForKey:@"123"];

// Use Key-Value Coding to get an array of all values for the key
// image_url
NSArray *imgurls = [itemsIn123 valueForKey:@"image_url"];

<小时/> 根据评论进行修改:

由于顶级数组可能包含多个对象,每个对象都有一个名称未知的名称 - 值对,因此需要手动迭代顶级数组:

NSString *jsonString = …;

NSMutableArray *imgurls = [NSMutableArray array];

// The top-level object is an array
NSArray *array = [jsonString JSONValue];

// Each element in the top-level array is an object
for (NSDictionary *outerObject in array) {
    // Iterate over all values in the object. Each (single) value is an array
    for (NSArray *innerArray in [outerObject allValues]) {
        [imgurls addObjectsFromArray:[innerArray valueForKey:@"image_url"]];
    }
}

答案 1 :(得分:2)

对象“123”的值将是NSDictionaries的NSArray。这些词典中的每一个都具有图像URL的关键“image_url”。

代码将取决于您使用的JSON解析库,但基础应该是相同的。

答案 2 :(得分:2)

首先你想要获取像123,112,189这样的关键值,这样我们就可以把键带到一个数组中

说像[Web {123 {image url} 112 {image url} 189 {image url}]

这样的结构

所以

 NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];

 SBJSON *jsonParser = [SBJSON alloc]init];

 NSMutableArray *yourArray1 = [jsonParser objectWithString:responseString]copy]]autorelease;

    ufArray = [[yourArray1 valueForKey:@"web"] copy];

   for (NSString *s in ufArray) {

    [keys addObject:[NSDictionary dictionaryWithObjectsAndKeys:s,@"keys",nil]];
}

 NSLOG(@"keys :%@",keys);

 // this will contain 112,123,114 etc values
      initialize a NSMutableArray

      finalArray = [NSMutableArray alloc]init];

    for (int i = 0; i < [ufArray count]; i ++) {

    yourArray1 = [ufArray valueForKey:[[keys objectAtIndex:i]valueForKey:@"keys"]];

    // [keys object at indes:i] - > 123 val / next loop 112 array like that

    [finalArray addObject:yourArray1];
}


   [jsonParser release];

    jsonParser = nil;   

希望这有帮助!

答案 3 :(得分:-3)

如果该数组被称为jArray

var img_urls = [];
var jL = jArray[0][123].length;
var img_urls = [];
for(var i = 0; i < jL; i++){
    img_urls[i] = jArray[0][123][i].image_url;
}

//display in console: 
console.log(img_urls);

演示:http://jsfiddle.net/maniator/Vx3hu/4/

答案 4 :(得分:-4)

我之前从未使用过JSON,之前从未使用过iPhone,之前从未使用过Xcode ......但我会认为它的内容沿着... ...

//object and image for item ID 222
123: item_id(222).image_url("some_url")

或第二项及以下项目

//hi
123: item_id(333).image_url("some_url")

然而,当你可以通过使用项目ID和图像ID来提取没有URL的图像时,更好的是,所以当调用对象123时,你可以指定项目id和图像id,然后输出所有您需要的信息。例如,可以显示计数,文件类型和图像。

123: item_id(222).image_id(222)

数据文件是SQL还是XML? XML通常更快!所以请在节点上阅读。

希望有所帮助。

DL