我正在解析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
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; }
因此,在这里我观察到两件事:
键(或节点)的序列(MESSAGE,RESPONSE和STATUS)被改变相比上述网络响应为。
MESSAGE
RESPONSE
STATUS
将RESPONSE被括在'(' & ')'大括号中。
'(' & ')'
现在,如果我将键MESSAGE&STATUS和NsLog 它们的值分开,则它们将作为适当的字符串打印出来。
NsLog
喜欢msgStr:Here will be message和 Status:OK
msgStr:Here will be message
Status:OK
但是, 如果我将值RESPONSE作为字典分开,然后再像email和一样分开那个字典的子值username,那么 我就不能将它们作为字符串 。
email
username
这是到目前为止我编写的代码:
NSMutableDictionary *response = [json valueForKey:@"RESPONSE"]; NSString *username = [response valueForKey:@"username"]; NSString *emailId = [response valueForKey:@"email"];
如果我打印username和emailId,则它们 不会被打印为普通字符串 ,而是输出为:
emailId
username:( john ) email:( abc@gmail.com )
所以我的问题是为什么它不能像普通字符串一样?如果我尝试进一步使用此变量,则它们会显示括号内的值'(' & ')'。是因为发生这种情况NSJSONSerialization吗?
NSJSONSerialization
首先,在您的JSON响应中dictionary,在键“ RESPONSE ”下,您有一个不是的dictionary数组,并且该数组包含dictionary对象。因此要提取 用户名 和 电子邮件ID ,如下所示
dictionary
NSMutableDictionary *response = [[[json valueForKey:@"RESPONSE"] objectAtIndex:0]mutableCopy]; NSString *username = [response valueForKey:@"username"]; NSString *emailId = [response valueForKey:@"email"];