我有一个iOS应用程序,需要处理来自Web服务的响应。响应是包含序列化JSON对象的序列化JSON字符串,如下所示:
"{ \"name\" : \"Bob\", \"age\" : 21 }"
请注意,此响应是JSON 字符串 ,而不是JSON对象。我需要做的是将字符串反序列化,这样我就可以得到:
{ "name" : "Bob", "age" : 21 }
然后我可以+[NSJSONSerialization JSONObjectWithData:options:error:]用来反序列化为NSDictionary。
+[NSJSONSerialization JSONObjectWithData:options:error:]
NSDictionary
但是,我该如何第一步?也就是说,如何“解串”字符串,以便拥有序列化的JSON对象? +[NSJSONSerialization JSONObjectWithData:options:error:]仅当顶级对象是数组或字典时才有效;它不适用于字符串。
我最终编写了自己的JSON字符串解析器,希望它符合RFC 4627的2.5节。但是我怀疑我已经忽略了使用NSJSONSerialization其他可行方法进行此操作的简单方法。
NSJSONSerialization
如果您嵌套了JSON,则只需调用JSONObjectWithData两次:
JSONObjectWithData
NSString *string = @"\"{ \\\"name\\\" : \\\"Bob\\\", \\\"age\\\" : 21 }\""; // --> the string // "{ \"name\" : \"Bob\", \"age\" : 21 }" NSError *error; NSString *outerJson = [NSJSONSerialization JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:&error]; // --> the string // { "name" : "Bob", "age" : 21 } NSDictionary *innerJson = [NSJSONSerialization JSONObjectWithData:[outerJson dataUsingEncoding:NSUTF8StringEncoding] options:0 error:&error]; // --> the dictionary // { age = 21; name = Bob; }