【问题标题】:PHP add quotes to array for json_decodePHP为json_decode数组添加引号
【发布时间】:2012-03-26 23:31:30
【问题描述】:

我正在寻找 json_decode 一个字符串,但遇到了数组元素没有引号的问题。

JSON

{"Status":"DISPUTED","GUID":[]}
{"Status":"CONFIRMED","GUID":[G018712, G017623]}

PHP

$json = '{"Status":"CONFIRMED","GUID":[G018712,G017623]}';
$a = json_decode($json, true);
print $a['Status'];

结果

上面的 php 打印不会显示任何内容,因为数组中的数字混合了字母,而 json_decode 不喜欢它。您将如何向每个数组项添加字符串,以便 json_decode 起作用?

【问题讨论】:

  • 该服务未提供有效的 JSON。
  • 这是无效的 JSON...在 jsonlint 上测试它
  • 我认为 OP 知道它是无效的。 OP 正在寻找一种方法来处理这种特殊情况。
  • 这里得到了回答(我相信它回答了你的问题):Invalid JSON parsing using PHP

标签: php json preg-split


【解决方案1】:

您的json 无效。应该是-

$json = '{"Status":"CONFIRMED","GUID":["G018712","G017623"]}';

$json = '{Status:"CONFIRMED",GUID:["G018712","G017623"]}';

你可以很容易地修复它-

$json = preg_replace('/(?<!")(?<!\w)(\w+)(?!")(?!\w)/', '"$1"', $json);

完整示例

$json = '{"Status":"CONFIRMED","GUID":[G018712,G017623]}{"Status":"CONFIRMED","GUID":[018712,a017623]}';
// fix json
$json = preg_replace('/(?<!")(?<!\w)(\w+)(?!")(?!\w)/', '"$1"', $json);
$a = json_decode($json, true);
print $a['Status'];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    相关资源
    最近更新 更多