She*_*lam 6 iphone xcode cocoa-touch json objective-c
我有以下JSON对象:
{
"response": {
"status": 200
},
"messages": [
{
"message": {
"user": "value"
"pass": "value",
"url": "value"
}
]
}
Run Code Online (Sandbox Code Playgroud)
}
我正在使用JSON-Framework(也尝试过JSON Touch)来解析它并创建一个字典.我想访问"消息"块并提取"user","pass"和"url"值.
在Obj-C中,我有以下代码:
// Create new SBJSON parser object
SBJSON *parser = [[SBJSON alloc] init];
// Prepare URL request to download statuses from Twitter
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:myURL]];
// Perform request and get JSON back as a NSData object
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
// Get JSON as a NSString from NSData response
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
//Print contents of json-string
NSArray *statuses = [parser objectWithString:json_string error:nil];
NSLog(@"Array Contents: %@", [statuses valueForKey:@"messages"]);
NSLog(@"Array Count: %d", [statuses count]);
NSDictionary *results = [json_string JSONValue];
NSArray *tweets = [[results objectForKey:@"messages"] objectForKey:@"message"];
for (NSDictionary *tweet in tweets)
{
NSString *url = [tweet objectForKey:@"url"];
NSLog(@"url is: %@",url);
}
Run Code Online (Sandbox Code Playgroud)
我可以提取"消息"并查看所有"消息"块,但我无法解析更深层次并拉出"用户","传递"和"网址".
解决了:
NSArray *tweets = [[results objectForKey:@"messages"] valueForKey:@"message"];
Run Code Online (Sandbox Code Playgroud)
Array({
0=>Dictionary({
response = Array({
0=>Dictionary(Status = 200)
})
}),
1=>Dictionary({
messages = Array({
0=> Dictionary({
message = Array({
0=>Dictionary({
user = value,
pass=value,
url=value
})
})
})
})
})
})
Run Code Online (Sandbox Code Playgroud)
所以,要访问用户的字典,传递,网址,
nsarray *arr = jsonmainarray;
arr = [[[jsonmainarray objectAtIndex: 1] objectforkey:@"messages"] objectatindex: 0];
nsdictionary *dict = [arr objectatindex: 0];
arr = [dict objectforkey:@"message"];
dict = [arr objectatindex: 0]; // Dictionary with user, pass, url
Run Code Online (Sandbox Code Playgroud)