我希望解码下面的JSON数据:
{
"content":
[
{
"1":"a",
"2":"b",
"3":"c",
"4":"d",
"mark":"yes"
}
]
}
不确定是否将其放入NSArray或NSDictionary
欢迎任何评论
答案 0 :(得分:31)
NSJSONSerialization
类来解析JSON数据,如果您需要定位较旧的iOS或MAC OSX,则应使用第三方库,例如SBJSON
。发布的字符串将是一个带有一个字典的数组的NSDictionary。可以使用键@"content"
访问该数组
在代码中:
NSString * jsonString = @"blblblblblb";
NSStringEncoding encoding;
NSData * jsonData = [jsonString dataUsingEncoding:encoding];
NSError * error=nil;
NSDictionary * parsedData = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];
在SWIFT 2.0中:
let jsonString = "blblblblblb"
let encoding = NSUTF8StringEncoding
let jsonData = jsonString.dataUsingEncoding(encoding)
guard let jData = jsonData else {return}
do {
let parsedData = try NSJSONSerialization.JSONObjectWithData(jData, options: [])
} catch let error {
print("json error: \(error)")
}
[UPDATE]
NSJSONSerialization
课程也适用于10.7我的评论不正确。
答案 1 :(得分:3)
该特定字符串将解码为NSDictionary,因为最外层的东西是一个JSON对象,它映射到我所见过的每个JSON实现的NSDictionary。如果你想处理任意字符串,你需要测试你得到的东西
NSError *jsonError;
id parsedThing = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];
if (parsedThing == nil)
{
// error
}
else if ([parsedThing isKindOfClass: [NSArray class]])
{
// handle array, parsedThing can be cast as an NSArray safely
}
else
{
// handle dictionary, parsedThing can be cast as an NSDictionary
// NB only dictionaries and arrays allowed as long as NSJSONReadingAllowFragments
// not specified in the options
}
答案 2 :(得分:1)
stringWithContentsOfFile:encoding:
已弃用iOS<6
代表iOS 6+
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"contents" ofType:@"json"];
NSError * error=nil;
NSString *jsonString = [NSString stringWithContentsOfFile:filePath encoding:nil error:&error];
NSData * jsonData = [jsonString dataUsingEncoding:nil];
NSArray * parsedData = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];
contents.json
文件在你的包中。
答案 3 :(得分:0)
您可以执行以下操作:
NSData *data = ...; //JSON data
NSError *jsonError = nil;
[NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];
您将收到一个NSDictionary
,其中包含NSArray
个NSDictionary
,其中包含五个NSString
个{{1}}个对象。
答案 4 :(得分:0)
我使用谷歌语音识别API,我得到了一个json响应,这在iOS上无法直接解析。结果样本如:
首先,我尝试说Hello 1 2 3,但没有问题。 Json的回应是:
{"result":[]}
{"result":[{"alternative":[{"transcript":"hello 123","confidence":0.59780568},{"transcript":"hello 1 2 3"}],"final":true}],"result_index":0}
或者,当谈了太久时,我得到了一个404 HTML,如下所示:
<html><title>Error 400 (Bad Request)!!1</title></html>
当我说喋喋不休时,我得到了:
{"result":[]}
因此,为了解析所有这样的响应,我使用了以下代码:
NSString *msg = @"Could not synthesize !";
NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"responseString: %@",responseString);
if([responseString containsString:@"transcript"]&&responseString.length>25)
{
responseString = [responseString stringByReplacingOccurrencesOfString:@"{\"result\":[]}" withString:@""];
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:[responseString dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:nil];
if(dictionary!=nil)
if(dictionary.allValues.count>0)
{
NSArray *array =[dictionary valueForKeyPath:@"result.alternative.transcript"];
if(array)
{
NSArray *array2 = [array objectAtIndex:0];
if(array2)
{
NSLog(@"%@",[array2 objectAtIndex:0] );
msg = [array2 objectAtIndex:0];
};
}
}
}
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Google Response" message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
希望这有助于某人。