我需要在PHP中解码JSON字符串,但事实是该字符串具有JSON编码的字符串作为值之一。像这样的东西:
{
"key1": "value1",
"key2": "{\"key3\":\"{\\\"key4\\\":\\\"value4\\\"}\"}"
}
我正在尝试使用json_decode将其解析为一个数组,但是它始终会失败,并显示语法不正确的错误。如果我将其放在可以在网上找到的任何验证器中,则表明该字符串有效。我应该使用其他方法来解析字符串吗?
PS:我很好,因为一旦解码,key2的值就不会是数组,而是一个我必须再次解码的字符串。
谢谢!
答案 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不好,您在{}
附近没有多余的“$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字符串,您可以再次对其进行解码。