我是一名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的专家。
我尝试过以下方面无济于事:
答案 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%有效。