如何从Objective-C

时间:2016-01-19 17:52:39

标签: ios objective-c json text-files

我知道,JSON解析问题一再被问到,但我仍然找不到任何答案。
我一直在尝试使用NSJSONSerialization来阅读和解析文本JSON文件,但无济于事 我尝试过使用NSString中的相同JSON数据,但确实有效 这是代码:

NSError      *error;

NSString     *jsonString1 = [NSString stringWithContentsOfFile:jsonFilePath
                                                      encoding:NSUTF8StringEncoding
                                                         error:&error];
NSData       *jsonData1   = [jsonString1 dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonObject1 = [NSJSONSerialization JSONObjectWithData:jsonData1
                                                            options:0
                                                              error:&error];

NSString     *jsonString2 = @"{\"key\":\"value\"}";
NSData       *jsonData2   = [jsonString2 dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonObject2 = [NSJSONSerialization JSONObjectWithData:jsonData2
                                                            options:0
                                                              error:&error];

- 文本文件包含一行:{“key”:“value”} - jsonString1 = @“{”key“:”value“}”
- jsonString2 = @“{\”key \“:\”value \“}”
- jsonData1的大小为23字节 - jsonData2的大小为15个字节 - jsonObject1为零,我收到错误代码3840
- jsonObject2是一个有效的字典

似乎问题在于读取文件,因为NSStrings和NSDatas有所不同,但我在这里做错了什么以及如何修复它?

2 个答案:

答案 0 :(得分:1)

您的文件很可能包含一些触发失败的不可打印字符(例如\ 0)。打印错误消息将告诉您第一个无效字符出现在什么位置。

例如,尝试打印"{\"key\":\u{0000}\"value\"}"并且您似乎获得了有效的JSON,但解码失败。

答案 1 :(得分:0)

总是在使用NSUTF8StringEncoding执行任何操作时检查返回值,如果为nil,则尝试NSASCIIStringEncoding:

NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
if (jsonString == nil) {
    jsonString = [[NSString alloc] initWithData:jsonData encoding:NSASCIIStringEncoding];
}

return jsonString;