JSON解析错了吗? [关闭]

Posted

技术标签:

【中文标题】JSON解析错了吗? [关闭]【英文标题】:Is JSON parsing wrong? [closed] 【发布时间】:2012-02-16 07:34:07 【问题描述】:

我正在使用最新的 SDK 和 XCode 4.2 开发一个 ios 应用程序。

为了解析 JSON 响应,我使用了这个 JSON 解析器:https://github.com/stig/json-framework/

我从网络服务收到这个 JSON 字符串(这是控制台日志):

2012-02-16 08:21:59.525 JReader[558:207] "rules": [
 "id_categoria": "3","categoria": "cat03" , "id_categoria": "2","categoria": "cat02" 
     ]
   

JSON 解析器使用这两个元素解析为 NSArray这是控制台日志):

2012-02-16 08:22:04.910 JReader[558:207] 
    categoria = "cat03";
    "id_categoria" = 3;


2012-02-16 08:22:04.911 JReader[558:207] 
    categoria = "cat02";
    "id_categoria" = 2;

要解析的Objective-C代码是:

- (IBAction)go:(id)sender

    parser = [[SBJsonParser alloc] init];
    NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://XXX"]];

    NSData* response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];

    // parse the JSON response into an object
    // Here we're using NSArray since we're parsing an array of JSON status objects
    NSLog(@"%@", json_string);
    NSDictionary* datos = [parser objectWithString:json_string error:nil];
    NSArray* data = [datos objectForKey:@"rules"];
    for (int i = 0; i < data.count; i++)
    
        NSLog(@"%@", [data objectAtIndex:i]);
    


我希望NSDictionary 带有这些对:

  key           value
============  ============
categoria         cat03
id_categoria        3

我的问题:

    json字符串有错误吗?

    为什么会这样解析?

第一次解析JSON,不知道解析好不好。

【问题讨论】:

为什么这不是您预期的输出?你觉得它有什么问题? 我已经用我的期望更新了我的问题。这是我第一次进行json解析所以我不知道它是否正确。 即使有了您的更新,我也看不出您认为有什么问题。根对象就是数组吧? 最上面的日志就是你看到的?这 is 是一本包含您期望的对的字典,但我不确定不一致的引号。请注意,现在 iOS 内置了 JSON 解析/创建,带有 NSJSONSerialization。 不知道是不是有什么问题。我问是不是有什么问题,因为这是我第一次做JSON解析。 【参考方案1】:

这并没有错。它是字典中的字典数组,键为rules。这正是你得到的。

【讨论】:

【参考方案2】:

问题:

NSDictionary* datos = [parser objectWithString:json_string error:nil];
NSArray* data = [datos objectForKey:@"rules"];
for (int i = 0; i < data.count; i++)

    NSLog(@"%@", [data objectAtIndex:i]);

因此,您将数组记录在主字典中。您正确地解析了 JSON,您只是在记录其他内容。

【讨论】:

我的问题是 [data objectAtIndex:i] 是一个 NSDictionary,我不知道。所以,当我看到它的日志时,我认为 [data objectAtIndex:i] 是一个 NSString。对不起,是我的错。

以上是关于JSON解析错了吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

单对象 json 解析 - 我做错了啥?

我无法解析从 NSURL 会话返回的 JSON。我究竟做错了啥?

我使用 volley 库来解析 json 和 logcat 没有显示错误,但屏幕上仍然没有输出。有人能告诉我哪里出错了吗?

kettle调用一个web service 如何将返回的json字符串解析并放入数据表中

易语言json解析

Qt 的最佳 JSON 解析器? [关闭]