微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在iOS中使用NSJSONSerialization进行JSON解析

我在我的代码中解析 JSON.但是在检索解析的 JSON数据时我遇到了一些意想不到的问题.那么让我解释一下我的问题.

我必须使用xcode解析以下JSON数据.当我在浏览器中点击相同的URL时,这就是要解析的数据:

{
"RESPONSE":[
    {"id":"20","username":"john","email":"abc@gmail.com","phone":"1234567890","location":"31.000,71.000"}],"STATUS":"OK","MESSAGE":"Here will be message"
}

我达到此JSON数据的代码如下:

NSData *data = [NSData dataWithContentsOfURL:finalurl];
NSError *error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

如果我使用NSLog打印对象json,即NSLog(@“json:%@”,[json description]);看起来像:

json: {
    MESSAGE = "Here will be message";
    RESPONSE =(
                {
            email = "abc@gmail.com";
            id = 20;
            location = "31.000,71.000";
            phone = 1234567890;
            username = john;
        }
    );
    STATUS = OK;
}

所以,在这里我发现了两件事:

>与上面的Web响应相比,更改了键(或节点)的顺序(MESSAGE,RESPONSE和STATUS).
> RESPONSE被括在'(‘&’)’括号中.

现在,如果我将键的值分开MESSAGE& STATUS和NsLog它们,然后它们被打印为正确的字符串.

和msgStr一样:这里将是message&状态:OK

但是如果我将RESPONSE的值作为字典分离并再次将该字典的子值分离为电子邮件用户名,那么我就无法将其作为字符串.

这是我写的代码到目前为止:

NSMutableDictionary *response = [json valueForKey:@"RESPONSE"];
Nsstring *username = [response valueForKey:@"username"];
Nsstring *emailId = [response valueForKey:@"email"];

如果我打印用户名和emailId,那么它们不会被打印为普通字符串,而是输出为:

username:(
    john
)

email:(
    abc@gmail.com
)

所以我的问题是为什么它不是正常的字符串?如果我尝试进一步使用这些变量,那么它们会显示在'(‘&’)’括号内的值.这是因为NSJSONSerialization发生的吗?

解决方法

首先在您的JSON响应字典中,在“RESPONSE”键下,您有一个数组而不是字典,该数组包含字典对象.
所以要提取用户名和电子邮件ID,如下所示
NSMutableDictionary *response = [[[json valueForKey:@"RESPONSE"] objectAtIndex:0]mutablecopy];
 Nsstring *username = [response valueForKey:@"username"];
 Nsstring *emailId = [response valueForKey:@"email"];

原文地址:https://www.jb51.cc/iOS/330754.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐