如何在PHP中“以JSON形式”读取抓取的JavaScript对象文字(带有无引号的键)?

时间:2018-11-03 05:11:34

标签: php json

我有一个从网站抓取的json对象

{
    area: {
        "lang": "en",
        "area": "25",
        "region": "mea"
    },
    config: {
        "rtl": false,
        "breakpoint": 768
    }
}

由于季节区域 config 而没有用双引号引起来php函数 json_decode 会取消NULL

如果尚未在双引号中包含双引号,如何在php中将双引号添加到区域 config

1 个答案:

答案 0 :(得分:1)

使用正则表达式替换(假定格式)。

$json = preg_replace('/([^"\s]+)+: ?{/', '"$1": {', $js_object);

Regex101.com

PHP Sandbox

编辑

对于提供的字符串,您还需要检查两件事:

  • 确保模式不在字符串中(例如"Your selection: {packageName}"
  • 请确保反斜杠字符已转义(Source

这是更新的代码:

$js_object = '...';

$json_proper_backslashes = preg_replace('#\\\\([^"\\\\\/bfnrtu])#', '\\\\\\\\$1', $js_object);

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

$json_object = json_decode($json);