【发布时间】:2013-12-22 08:09:12
【问题描述】:
我在我的代码中解析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:Here will be message & Status:OK
但是如果我将 RESPONSE 的值分离为字典,然后再次分离该字典的子值,例如 email 和 username,那么 我无法得到这些作为字符串。
这是我目前写的代码:
NSMutableDictionary *response = [json valueForKey:@"RESPONSE"];
NSString *username = [response valueForKey:@"username"];
NSString *emailId = [response valueForKey:@"email"];
如果我打印username 和emailId,那么它们不会作为普通字符串打印,而是输出为:
username:(
john
)
email:(
abc@gmail.com
)
所以我的问题是为什么它没有像普通字符串一样?如果我尝试进一步使用这些变量,那么它们会显示包含在 '(' & ')' 大括号内的值。这是因为NSJSONSerialization吗?
【问题讨论】:
-
格式已更改,因为现在它是 NSDictionary 而不是格式化的 JSON 字符串。 NSDictionary 有自己的格式来打印它的描述
标签: ios objective-c json parsing nsjsonserialization