对象。 C - 如何处理错误写入的 JSON

Posted

技术标签:

【中文标题】对象。 C - 如何处理错误写入的 JSON【英文标题】:Obj. C - how to deal with wrong written JSON 【发布时间】:2016-03-02 15:33:26 【问题描述】:

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

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

(...同样的重复错误,但它们不规律)

 ]

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


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

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

【问题讨论】:

听起来您必须编写删除尾随逗号的代码。检测何时适合移除它们似乎是一种巨大的痛苦。为什么不能向 API 开发人员打开错误报告?如果你真的不能,也许看看这个 API 是否有其他客户端已经解决了这个问题。他们可能有一个你可以利用的算法。 已经明确对我说过,我必须使用这个API而不改变它。糟糕的是,我认为我解析错误并因此损失了 1 个工作日。在向老板声明 JSON 中的错误后,我被告知“为它编写一个解析器,这真的很容易。这是初学者的任务”。 尾随逗号不是您唯一的问题;你原来的“JSON”看起来像一个变量赋值。但是,就像结尾的逗号一样,这很容易解决。 @ScottHunter,您是否有任何线索或资源来执行这个简单的修复? @ScottHunter 如果没有明确定义的规范,我不确定这很容易。 【参考方案1】:

看起来 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`. 开头的部分开始。

【讨论】:

到目前为止,这对我来说听起来不错。但是对于 Obj C 的初级开发人员来说,这似乎不是“容易的事情” :) 我会立即尝试!

以上是关于对象。 C - 如何处理错误写入的 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 Spring Rest Web 服务中的 JSON 解析错误

什么是JSON+如何处理JSON字符串

如何处理空的 JSON 对象?

Python:如何处理 https 连接被拒绝错误并将日志写入服务器

我该如何处理这个 Array 对象? (目标-C)

如何处理 json 并写入 node.js 中的文件