如何在PHP中解码包含json字符串作为值的json字符串?

时间:2019-02-11 13:33:34

标签: php json

我需要在PHP中解码JSON字符串,但事实是该字符串具有JSON编码的字符串作为值之一。像这样的东西:

{
    "key1": "value1",
    "key2": "{\"key3\":\"{\\\"key4\\\":\\\"value4\\\"}\"}"
}

我正在尝试使用json_decode将其解析为一个数组,但是它始终会失败,并显示语法不正确的错误。如果我将其放在可以在网上找到的任何验证器中,则表明该字符串有效。我应该使用其他方法来解析字符串吗?

PS:我很好,因为一旦解码,key2的值就不会是数组,而是一个我必须再次解码的字符串。

谢谢!

4 个答案:

答案 0 :(得分:1)

基于提供的输入-您必须替换所有那些讨厌的反斜杠和双引号才能获得正确的JSON:

<?php
$s = '{
    "key1": "value1",
    "key2": "{\"key3\":\"{\\\"key4\\\":\\\"value4\\\"}\"}"
}';

$s = str_replace('\\', '', $s);
$s = str_replace('"{', '{', $s);
$s = str_replace('}"', '}', $s);

print_r(json_decode($s, true));
?>

输出:

Array
(
[key1] => value1
[key2] => Array
    (
        [key3] => Array
            (
                [key4] => value4
            )
    )
)

答案 1 :(得分:0)

您的json不好,您在{}

附近没有多余的“

http://prntscr.com/mjkrcb

$a = '{
    "key1": "value1",
    "key2": {"key3":{"key4":"value4"}}
}';

var_dump(json_decode($a));

答案 2 :(得分:0)

您可以使用以下代码行准备字符串:

    $json_string.= '{"id":"'.$variable.'","name":"'.preg_replace("~[\"]~","\\\\\"",$variable_name).'","other_name":"'.preg_replace("~[\"]~","",$other_name_variable).'"},';

然后,您必须将字符串转换为JSON数组。 不要忘记右引号和字符串格式。 有关JSON的更多信息:https://www.json.org/-在这里您可以找到说明和示例 preg_replace函数的更多内容:http://php.net/manual/en/function.preg-replace.php

答案 3 :(得分:-1)

您可以使用json_decode()两次或更多次

$a = {
   "key1": "value1",
   "key2": "{\"key3\":\"{\\\"key4\\\":\\\"value4\\\"}\"}"
 }
 $b = json_decode($a);
 $c = json_decode($b->key2);

它为您提供了一个带有key3的对象。再次可以使用json_decode()。

如果与结构不同,则它是您结构的正确字符串,这可能是错误的。

{"key1":"value1","key2":"{\"key3\":\"{\\\"key4\\\":\\\"value4\\\"}\"}"}

注意:我想我应该对此进行编辑。当在字符串中使用\时,如果要精确复制,请在字符串中放入\,应该替换它们。如果使用json_last_error(),则会在此字符串中给出语法错误。

注意:如果您确实喜欢@mitkosoft的上述回答,则会由于两个问题而更改结构。首先,将对象更改为array。其次,如果您在第一级进行解码,则应该为您的“ key2”值获取一个字符串,而不是数组。这是一个json字符串,您可以再次对其进行解码。