我获得了一些编写得很糟糕的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。
答案 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`.
开始的部分开始。