如何从PHP中的JSON输出中删除无效字符

时间:2012-08-16 20:52:06

标签: php json

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

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

我已经有效地从源代码中删除了JSON,严格地说是传递给json_decode()的JSON数据。但是,我总是得到一个null结果,因为JSON对象有一个无效的部分,我的代码实际上并不需要它来运行。在我的应用程序中,JSON的整个“espots”部分是不需要的,但是多行“内容”部分正在搞砸json_decode()。有没有一种方法在PHP中通过RegEx或一些漂亮的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的罪魁祸首部分。

2 个答案:

答案 0 :(得分:1)

JSON是否以字符串形式出现?它不是“[”而是方形支架前面的新线,它正在抛弃它。如果是这样,你可能会使用str_replace,如:

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

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

答案 1 :(得分:0)

我通过使用以下RegEx去除空白和空格来解决这个问题。然后从上面冒犯“espots”:

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

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