将 JSON 导入到 Objective-C 时的奇怪输出

Posted

技术标签:

【中文标题】将 JSON 导入到 Objective-C 时的奇怪输出【英文标题】:Strange output when importing JSON to Objective-C 【发布时间】:2014-01-23 13:22:57 【问题描述】:

正如问题所说,将 JSON 导入 TableView 类时,我得到了一个意外的输出。

JSON:

"city":"Cambridge""city":"Oxford"

目标-C:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.domain.com/cities.php"]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSLog(@"%@", response);

输出:

<7b226369 7479223a 2243616d 62726964 6765227d 7b226369 7479223a 224f7866 6f726422 7d>

很确定我的 JSON 结构错误...

【问题讨论】:

谢谢,标题已编辑。 虽然您描述的最初问题只是您正在记录 NSData 的一个实例,如几个答案中所述,但您发布的 JSON 结构不正确,因此您将无法除非你修复它,否则用 NSJSONSerialization 反序列化它。 【参考方案1】:

您的响应是 NSData 类型,需要转换为字符串。

NSString *responseString = [[NSString alloc] initWithBytes:[response bytes] length:[response length] encoding:NSUTF8StringEncoding];
NSLog(responseString);

您也可以使用其他地方描述的 initWithData

NSString *responseString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];

虽然这对于调试很有用,但要实际提取或处理数据,您需要将其转换为字典或数组。

NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:response options:0 error:NULL];

从这里,您可以参考字典中的项目。

【讨论】:

为什么不使用NSJSONSerialization将其转换为数组或字典? 这取决于你想要做什么。我假设他希望看到 JSON,而不是 JSON 的字典表示。 如果有影响,我希望将它们显示在 UITableView 对象中。 为什么要这样假设?如果您包含NSJSONSerialization,您的回答会更有帮助。 说得好。答案已修改。【参考方案2】:
NSArray *responseArray = [NSJSONSerialization JSONObjectWithData:response options:kNilOptions error:nil];
NSLog(@"%@",responseArray);
NSMutableArray *cityArray =[[NSMutableArray alloc] init];
for (int i=0; i<[responseArray count]; i++)

    [cityArray addObject:[NSString stringWithFormat:@"%@",[[responseArray objectAtIndex:i] valueForKey:@"city"];

请注意,我相信您会修复该 json 并将其转换为 json 返回一个数组。

【讨论】:

【参考方案3】:
NSString *jsonStr = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];

NSLog(@"%@",jsonStr);

【讨论】:

以上是关于将 JSON 导入到 Objective-C 时的奇怪输出的主要内容,如果未能解决你的问题,请参考以下文章

将方法从 Objective-C 转换为 Swift 时的区别

将 Swift 导入 Objective-C - “使用未声明的标识符”

无法使用桥接头将 Objective-C 文件导入 Swift 项目

无法使用桥接头将 Objective-C 文件导入 Swift 项目

从Web服务objective-c获取数据时的透明加载视图

JSON 到 Objective-C 中的模型映射