【发布时间】:2015-07-19 20:37:30
【问题描述】:
示例输入字符串:
{"14" 合金车轮(4 件套)":"N/A","Engine":"CrDi","15" 合金车轮":"optional","Other":"16" Wheels" };
有4种可能的情况:
{“这里的键”:
,"关键"在这里":
:"这里的值",
:“这里的值”}
我需要去掉键和值之间的逗号,这是导致
无效的json
在 PHP 中使用 json_decode 时。
一种可能的解决方案是使用正则表达式,但我无法制定上述可能的情况。
【问题讨论】:
-
这不是一个有效的 JSON 字符串。嵌入的引号应该用反斜杠转义。如果你正确地创建了 JSON 字符串,
json_decode()应该能够解析它,你不需要做任何额外的事情。 -
当引号没有正确转义时,字符串是不明确的。没有可靠的方法来判断键是否结束而值是否开始。您不能只查找
:和,,因为它们可能是键或值的一部分。 -
你不应该尝试解析这个,你应该首先修复产生错误 JSON 的代码。它可能是手动创建 JSON,而不是使用 PHP 中的
json_encode()或 Javascript 中的JSON.stringify()之类的库函数。除非数据非常简单,否则这将导致灾难。 -
我从 API 接收到上述字符串,并将其保存在我的数据库中。我只能在我身边解码。我尝试用 : 来分解字符串,对于每个元素,我再次用 " 来分解,如果数组长度是奇数,这意味着一个额外的 ",我正在替换它,但它是一个双循环过程,效率不够。
-
@anurag:请检查这是否适合您:
(?<=[{,:])"([^",:{}]*)"([^",:{}]*)"替换为"$1$2"。见regex101.com/r/uC5yV2/1 和ideone.com/AxR2Zb