一尘不染

在iOS中使用NSJSONSerialization进行JSON解析

json

我正在解析JSON我的代码。但是在检索已解析的数据时遇到了一些意外的问题JSON。所以,让我解释一下我的问题。

我必须JSON使用xcode 解析以下数据。这是我在浏览器中命中相同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];

如果我json使用来打印对象NSLog,即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;
}

因此,在这里我观察到两件事:

  1. 键(或节点)的序列(MESSAGERESPONSESTATUS)被改变相比上述网络响应为。

  2. RESPONSE被括在'(' & ')'大括号中。

现在,如果我将键MESSAGESTATUSNsLog 它们的值分开,则它们将作为适当的字符串打印出来。

喜欢msgStr:Here will be messageStatus:OK

但是, 如果我将值RESPONSE作为字典分开,然后再像email和一样分开那个字典的子值username,那么
我就不能将它们作为字符串

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

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

如果我打印usernameemailId,则它们 不会被打印为普通字符串 ,而是输出为:

username:(
    john
)

email:(
    abc@gmail.com
)

所以我的问题是为什么它不能像普通字符串一样?如果我尝试进一步使用此变量,则它们会显示括号内的值'(' & ')'。是因为发生这种情况NSJSONSerialization吗?


阅读 278

收藏
2020-07-27

共1个答案

一尘不染

首先,在您的JSON响应中dictionary,在键“ RESPONSE
”下,您有一个不是的dictionary数组,并且该数组包含dictionary对象。因此要提取 用户名电子邮件ID ,如下所示

NSMutableDictionary *response = [[[json valueForKey:@"RESPONSE"] objectAtIndex:0]mutableCopy];
 NSString *username = [response valueForKey:@"username"];
 NSString *emailId = [response valueForKey:@"email"];
2020-07-27