0

我是一名 PHP 开发人员,正在编写将逐步执行并解析 JSON 对象的代码,以便我可以在以最终形式输出数据之前对其进行操作。这是一些 JSON 示例(它非常大,所以我删除了我需要的大部分项目,只放置了无效部分):

[
    {
        "items": [
            {
                // this is valid and what I need.
            }
        ],
        "espots": [
            {
                "content": "
[TopNavigation_Appliances]
"
            }
        ]
    },

我已经有效地将 JSON 从其源中剥离,严格来说是传递给 json_decode() 的 JSON 数据。但是,我总是得到一个空结果,因为 JSON 对象有一个无效的部分,我的代码实际上并不需要它来运行。我的应用程序不需要 JSON 的整个“espots”部分,但多行“内容”部分正在搞砸 json_decode()。有没有办法通过 RegEx 或一些漂亮的 PHP 在 PHP 中从 JSON 输出中删除这些项目,以便我可以正确使用 json_decode() 检索 n 数组,然后我的代码可以按照我需要的方式操作和处理它至?

这是 JSONLint(和另一个验证器)给出的错误消息:

Parse error on line 263:
...         "content": "[TopNavigation_App
-----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['

我正在收集“[ 导致 JSON 无效,但我不是 Json 专家。

我尝试了以下无济于事:

  • str_replace() 在其原始格式的行上
  • trim() 和 str_replace
  • 修剪()
  • str_replace 删除换行符然后尝试 str_replace() JSON 的罪魁祸首部分。
4

2 回答 2

2

JSON 是作为字符串输入的吗?它不是“[”,而是方括号前面的新行,它把事情扔掉了。如果是这样,您可能可以使用 str_replace ,例如:

$jsonStr = str_replace("\n", '', str_replace("\r", '', $jsonStr) );

但是如果没有更多代码,很难确定。

于 2012-08-16T21:06:29.903 回答
0

我通过使用以下 RegEx 去除空格然后从上面有问题的“espots”解决了这个问题:

preg_replace('#, "espots":.*?}\s]#', '', preg_replace('/\s+/', ' ',$nearlyThere[0]));

然后在原始帖子中没有的随机无效字符串上进行次要 str_replaces 以使其 100% 有效。

于 2012-08-17T21:05:33.607 回答