1

我想在我的 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",  
  }]  
}]  

有人可以帮助我如何提取“123”的所有img_url。

谢谢你。

4

5 回答 5

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"]];
    }
}
于 2011-05-18T03:48:52.367 回答
2

对象“123”的值将是 NSDictionaries 的 NSArray。这些字典中的每一个都有一个用于图像 url 的键“image_url”。

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

于 2011-05-17T21:56:19.060 回答
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;   

希望这可以帮助!

于 2011-05-18T03:07:38.493 回答
-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/

于 2011-05-17T21:53:43.947 回答
-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。

于 2011-05-17T22:06:07.783 回答