【问题标题】:JS JSON not parsed by PHP json_decodeJS JSON 未由 PHP json_decode 解析
【发布时间】:2015-08-19 14:28:15
【问题描述】:

我在使用 json_decode PHP 函数解析 JSON 数据时遇到问题。问题是我收到的 JSON 格式不正确。它看起来如下:

"{ user:1 ,product:4 ,commentCount: 1 ,comment:'All fine! Well done.' ,commentDate:{ year:2015 ,month:8 ,day:19 } , likes:8 }"

当我尝试使用 json_decode PHP 函数解码此字符串时,我得到 NULL。 是否可以使用 preg_replace 函数正确格式化此字符串

编辑: 我在网上找到了这段代码,但它只将变量名包含在引号中。值仍保持原样,json_decode 仍返回 NULL。

// fix variable names
$PHPJSON = preg_replace( '/([a-zA-Z0-9_]+?):/' , '"$1":', $PHPJSON );

【问题讨论】:

  • 这是一个无效的 json
  • 是的,我知道。问题是是否可以使用 preg_replace 正确格式化它?
  • 在 Javascript 中创建的位置正确格式化
  • 我不创建它。我从第三方收到它。我无法在收到之前更改它。
  • 这就是我的预期,不过你至少应该告诉他们他们的错误,也许他们会修复它

标签: javascript php json


【解决方案1】:

格式错误的 json 的有效解决方案:

$json = "{ user:1 ,product:4 ,commentCount: 1 ,comment:'All fine! Well done.' ,commentDate:{ year:2015 ,month:8 ,day:19 } , likes:8 }";

$json = preg_replace('/(,|\{)[ \t\n]*(\w+)[ ]*:[ ]*/','$1"$2":',$json);
$json = preg_replace('/":\'?([^\[\]\{\}]*?)\'?[ \n\t]*(,"|\}$|\]$|\}\]|\]\}|\}|\])/','":"$1"$2',$json);

var_dump($json);

var_dump(json_decode($json));

但通常您需要将对象参数用双引号 "arg":1 括起来。非数值也是。就像这样:

var_dump(json_decode('{"user":1}'));
var_dump(json_last_error());

如果有任何错误,第二个函数会返回您的错误 ID。 检查php manual 以获取错误代码识别

【讨论】:

  • 他知道 JSON 格式不正确,这不是答案
  • 用解决方案更新了我的答案
  • 很好 -1 已删除
  • 谢谢,但我已经查看了 PHP 手册。但问题仍然存在 - JSON 格式仍然错误。
  • 您是否使用了我的回答中的 preg_replace?在 PHP 5.4 上工作得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 2013-08-18
  • 2020-12-23
相关资源
最近更新 更多