1

我正在使用以下代码片段从 url 解析 JSON 对象。

   NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlAddress] options:NSDataReadingUncached error:&error];
    if (error != nil) {
        NSLog(@"%@",[error localizedDescription]);        
    }   else {
        NSLog(@"No Error: %@", data);  //looks good here. console displays the raw data 
    }

    id result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

    if (error != nil) {
        NSLog(@"%@",[error localizedDescription]);
        return nil;

    }   else {
        NSLog(@"No Error: %@", [result objectForKey:@"exams"]); //console displays the value ("No Error: value for key...") unless a degree symbol is present in which case it displays No Error: (null)

    }

我有大约 10 个 urlAddresses,对于 7 个 url,JSONObjectWithData 返回 json 对象。对于剩余的 3 个 url,JSONObjectWithData 返回 null。我尝试在 safari 中打开这个 url。我在其中看到了一些垃圾字符。我怀疑问题出在这个垃圾字符上。如何解决这个问题?

我已经看到这个“如果度数符号在 json 对象中,JSONObjectWithData 返回 null ”链接类似。建议使用 unicode 转义序列。如何使用这个“unicode 转义序列”来解决我的问题。

4

2 回答 2

2

我同意,如前所述,存在编码问题。

参考 RFC 4627 第 1 章,JSON 字符串“[...] 是零个或多个 Unicode 字符 [...] 的序列”。参考 RFC 4627 第 3 章,“JSON 文本应以 Unicode 编码。默认编码为 UTF-8。” 你得到的,可能不是 unicode。(请先检查这个

你有几个选项来处理这个问题:

a) 在厚纸上打印出 RFC 4627。去找负责发送此响应的人,用纸敲敲他的头,直到他说“我会尊重 RFC 4627”。(这是一种罕见的情况,其中暴力一种解决方案。)

b)如果您知道使用的编码,请从数据中创建一个字符串,然后将其重新编码为 un​​icode。然后使用 NSJSONSerializer 扫描编码数据。

c) 手动替换出现的错误代码。

于 2013-05-15T07:44:01.447 回答
1

从 JSON 对象中删除垃圾字符https://gist.github.com/oleganza/781772

于 2013-06-13T09:59:46.240 回答