OBJ。 C - 如何处理错误编写的JSON

时间:2016-03-02 15:33:26

标签: ios json web-services

我获得了一些编写得很糟糕的JSON文件,这些文件在任何AFNetworking和/或任何其他JSON序列化库中都无法读取。我必须强调,我无法强制在服务器端更改它,所以我必须按原样解析它。 不幸的是它有一些小错误(我将粘贴它的一小部分):

locations = [{
    "city": "Tokio",
    (...)
    "link": "http://somethig.com",
    "text": "Mon-Fr.",
}, {

(......同样的重复错误,但他们并不常规)

 }]

Aaand在XCode中正确解析它需要将其更改为正确的格式,例如:

{
    "locations": [{
        "city": "Tokio",
         (...)
        "link": "http://somethig.com",
        "text": "Mon-Fr."
    }, {
        (...)
}]
}

你知道如何处理这个问题吗? 如果我必须编写自己的解析器 - 请告诉我如何操作。任何帮助将不胜感激。我从http链接下载这个JSON。

1 个答案:

答案 0 :(得分:0)

看起来API正在向您发送一串JavaScript代码。在JavaScript中,您可以使用JSON.stringify()将对象转换为有效的JSON。以下是an interactive node.js shell的示例:

> locations = [{
...     "city": "Tokio",
...     "link": "http://somethig.com",
...     "text": "Mon-Fr.",
... }]
[ { city: 'Tokio', link: 'http://somethig.com', text: 'Mon-Fr.' } ]
> JSON.stringify(locations)
'[{"city":"Tokio","link":"http://somethig.com","text":"Mon-Fr."}]'

如果您确实无法在服务器端更改此设置,则可以尝试创建隐藏的UIWebView,添加JavaScript,调用JSON.stringify()并提取结果。但是,这将使用比所需更多的资源。使用API​​调用JSON.stringify()并向您发送有效的JSON字符串会更好(在计算能力,内存和时间方面)。

你也可以尝试将一些json3.js移植到Objective-C或Swift。如果你尝试这个,我会从// Public: `JSON.stringify`.开始的部分开始。