如何解析这个JSON提要?

时间:2011-07-17 19:56:30

标签: iphone ios

我已经发布了这个以寻求帮助,但不幸的是,他们都没有为我工作......  有人在那里帮助我..请.....如何解析这个JSON提要。我想获得所有项目,如'id','title','teaser','body','fid,'filename','filepath' .........

{
    "data":{
        "mat_149":{
            "id":"149",
            "title":"The closing of 40% profit within 9 month",
            "teaser":"profit within 9 months only which is equal to 52% annual profit",
            "body":" The auction was presented in a very high and commercial lands.\u000d\u000a",
            "files":{
                "911":{
                    "fid":"911",
                    "filename":"22.JPG",
                    "filepath":"http://mysite/files/22_0.JPG"
                }
            }
        },
        "mat_147":{
            "id":"147",
            "title":"Company launches the city ",
            "teaser":"demands for distinguished lands.",
            "body":" The area size is quare meters This is evident through projects and many other projects.\u000d\u000a\u000d\u000a",
            "files":{
                "906":{
                    "fid":"906",
                    "filename":"2D7z.jpg",
                    "filepath":"http://mysite/dlr/files/2D7Z.jpg"
                }
            }
        },
        "mat_link":"mysite.com/"
    }
}

我正在使用json-framework解析它:

NSString *response = [[NSString alloc] initWithData:receivedData encoding:NSASCIIStringEncoding] ;
SBJSON *parser = [[SBJSON alloc] init];  
NSDictionary *data = (NSDictionary *) [parser objectWithString:response error:nil];  
NSLog(@"Data : %@", [data valueForKey:@"data"] );

我正在获取数据:

NSLog(@"Data : %@", [data objectForKey:@"data"] );

我想得到所有物品'id','title','teaser','body','fid,'filename','filepath' .........请帮助我......请........


NSString *response = [[NSString alloc] initWithData:receivedData encoding:NSASCIIStringEncoding] ;
SBJSON *parser = [[SBJSON alloc] init];  
NSDictionary *data = (NSDictionary *) [parser objectWithString:response error:nil]; 

NSDictionary *filedict = [data valueForKey:@"data"];
for(id key in filedict) 
{
    NSDictionary *files = [filedict valueForKey:key];
    NSLog(@"File -------------------  = %@",files);
}

但问题是。有时它的说法

File -------------------  = "<null>";

我必须做什么..帮帮我......

3 个答案:

答案 0 :(得分:3)

您可以使用此JSON解析器https://github.com/stig/json-framework/ 然后你就可以这样使用它了:

NSDictionary *jsonData = [jsonString JSONValue];
//Get the data object
NSArray *data = (NSArray*)[jsonData objectForKey=@"**data**"];

现在您可以从数组对象访问数据。

遍历数据对象

for(int i=0;i<[data count];i++){
            NSDictionary *element = (NSDictionary *)[elements objectAtIndex:i];
  NSDictionary *user = (NSDictionary*)[element objectForKey:[[element allKeys] objectAtIndex:0]];
  NSString *ID = [user objectForKey:@"id"];
  NSString *title = [user objectForKey:@"title"];
  //...
}

注意您的对象键对于元素数组ex中的每个对象都不同。 mat_157与mat_156相比,因此无法获得统一的键值对象。这就是为什么你必须获得每个元素的第一个键:

NSDictionary *user = (NSDictionary*)[element objectForKey:[[element allKeys] objectAtIndex:0]];

答案 1 :(得分:1)

数据的最后一项中的文件为空。

“mat_link”: “mysite.com /”

此下没有定义任何文件元素。

答案 2 :(得分:0)

这很容易,你收到一个包含(主要)字典对象的字典。您可以通过对象的符号来看到这一点,例如:

带字符串的

字典: "aKey":"aValue"包含键'aKey'的字符串。
  带字典的字典: "aDict":{"aKey":"aValue"}是一个名为'aDict'的字典,其中包含一个名为'aKey'的密钥。

因此,如果我们记住这一点,我们可以毫不费力地解析您的JSON字典。

NSDictionary *data = (NSDictionary *) [parser objectWithString:response error:nil];
NSDictionary *dict = [data valueForKey:@"data"];
NSDictionary *mat = [dict valueForKey:@"mat_147"];
NSString *id = [mat valueForKey:@"id"];
NSString *title = [mat valueForKey:@"title"];

我猜valueForKeyPath:也可用于导航树。对于所有 mat _ ### 对象,您可能希望使用枚举器遍历每个 mat _ ### 字典。