php json_decode在键上没有引号的情况下失败

2022-08-31 00:24:08

我有这样的json数据表示

{key:"value"}

(没有引号的钥匙...)

我想将其转换为关联数组。

PHP 的json_decode返回 null

如何在密钥周围添加引号?谢谢。。。


答案 1

您可以在源中修复 JSON,使其返回有效的 JSON 结构,也可以手动在键两边添加引号。

这个类似问题的答案有一个如何做到这一点的例子:

function my_json_decode($s) {
    $s = str_replace(
        array('"',  "'"),
        array('\"', '"'),
        $s
    );
    $s = preg_replace('/(\w+):/i', '"\1":', $s);
    return json_decode(sprintf('{%s}', $s));
}

答案 2

如果您无法在源位置将其转换为有效的 JSON,则可以使用 PEAR 中的 Services_JSON 来解析它,因为在密钥周围添加引号是一个非常容易出错的过程。

Services_JSON将正确解析无效的密钥字符串。

例:

$json = new Services_JSON();
var_dump($json->decode('{key:"value"}'));

输出:

object(stdClass)#2 (1) {
  ["key"]=>
  string(5) "value"
}

推荐