从json键导出一些值作为新的json对象

时间:2019-04-14 18:58:11

标签: javascript php json

被困于将这个Javascipt代码(从SO)“转换”为php。

考虑"AAA='111' BBB='222' DD='333' CC='dao@toto.fr'"来自先前json对象键的值。

1-从某些API帖子中收到了json

{
  "first_key": "first_value",
  "sec_key": "sec_value",
  "third_key": "AAA='111' BBB='222' DD='333' CC='dao@toto.fr'",
}

2-希望像这样将Third_key值导出为新的json

{ "AAA": "111", "BBB": "222", "DD": "333", "CC": "dao@toto.fr" }

所以

<body>
<script type="text/javascript">

var input="AAA='111' BBB='222' DD='333' CC='dao@toto.fr'";
var result={};
 input.split("'").forEach(function(value,i,arr){
  if(i%2===0) return;
  var key=arr[i-1].trim().replace("=","");
  result[key]=value;
});

 console.log(result);
</script>
</body>

大约在我想要的控制台中得到了这个

Object { AAA: "111", BBB: "222", DD: "333", CC: "dao@toto.fr" }

预期输出:

Object { "AAA": "111", "BBB": "222", "DD": "333", "CC": "dao@toto.fr" }

如何在PHP中获得预期的输出?搜索引擎使我进入了json_encode/json_decode函数,与我所寻找的内容无关。

1 个答案:

答案 0 :(得分:3)

在PHP中,您可以使用正则表达式来提取名称和值,然后使用array_combine()将其结果合并为一个关联数组,然后json_encode()将结果数组组合起来,非常简单。

$third_key = "AAA='111' BBB='222' DD='333' CC='dao@toto.fr'";
preg_match_all("/(\w*)='(.*?)'/", $third_key, $matches);

print_r($matches);

echo json_encode(array_combine($matches[1], $matches[2]));

这给...

Array
(
    [0] => Array
        (
            [0] => AAA='111'
            [1] => BBB='222'
            [2] => DD='333'
            [3] => CC='dao@toto.fr'
        )

    [1] => Array
        (
            [0] => AAA
            [1] => BBB
            [2] => DD
            [3] => CC
        )

    [2] => Array
        (
            [0] => 111
            [1] => 222
            [2] => 333
            [3] => dao@toto.fr
        )

)
{"AAA":"111","BBB":"222","DD":"333","CC":"dao@toto.fr"}

print_r($matches);仅在这里显示正则表达式如何将原始字符串拆分为部分,以及最后一行如何用于创建结束数组。