我有一个包含JSON字符串的数组。
Array
(
[0] => Array
(
[name] => Original
[nutrients] => {"calories":{"value":2500,"operator":2},"protein":{"value":500,"operator":1},"carbs":{"value":200,"operator":0},"fat":{"value":50,"operator":0},"sugar":{"value":1,"operator":2}}
)
[1] => Array
(
[name] => Rest
[nutrients] => {"calories":{"value":5000,"operator":2},"sugar":{"value":10,"operator":2}}
)
)
我想将整个数组转换为JSON字符串
echo json_encode($array);
但是这会在所有引号前面引发\
[{"name":"Original","nutrients":"{\"calories\":{\"value\":2500,\"operator\":2},\"protein\":{\"value\":500,\"operator\":1},\"carbs\":{\"value\":200,\"operator\":0},\"fat\":{\"value\":50,\"operator\":0},\"sugar\":{\"value\":1,\"operator\":2}}"},{"name":"Rest","nutrients":"{\"calories\":{\"value\":5000,\"operator\":2},\"sugar\":{\"value\":10,\"operator\":2}}"}]
出现此问题是因为营养素值已经是JSON字符串。
当数组已经包含JSON字符串时,如何将数组转换为JSON字符串,而在引号前面没有斜杠?
答案 0 :(得分:1)
使用json_decode转换营养素'数组。
foreach($array as &$a){
$a['nutrients'] = json_decode($a['nutrients']);
}
然后
echo json_encode($array);
答案 1 :(得分:1)
如果数组已经包含JSON字符串,而在引号前没有斜杠,我怎样才能将数组转换为JSON字符串?
如果要将JSON值保留为字符串;那么,你不能,而你也不应该!
如果您的数组已经包含一些JSON值(其中它们会有一些引号:"
)并且您想将该数组编码为JSON字符串,则引号必须正确转义,你得到的正确;否则,整个JSON字符串将因为错过引号匹配而损坏。
这是因为"
在JSON中有特殊含义,但\"
表示"双引号字符" 没有"
的特殊标记;例如,从有效的JSON字符串中删除反斜杠会导致一些语法错误:
$json = '[{"name":"Original","nutrients":"{\"calories\":{\"value\":2500,\"operator\":2},\"protein\":{\"value\":500,\"operator\":1},\"carbs\":{\"value\":200,\"operator\":0},\"fat\":{\"value\":50,\"operator\":0},\"sugar\":{\"value\":1,\"operator\":2}}"},{"name":"Rest","nutrients":"{\"calories\":{\"value\":5000,\"operator\":2},\"sugar\":{\"value\":10,\"operator\":2}}"}]';
$json_noBackslashes = str_replace('\\', '', $json);
$json_decoded = json_decode($json_noBackslashes);
echo json_last_error_msg(); // Syntax error
答案 2 :(得分:0)
您应该首先json_decode
json
数据,然后将其放回原始数组。之后,您可以再次对整个数组进行编码以获得所需的输出。
foreach ($data as $datum) {
$data['nutrients'] = json_decode($data['nutrients']);
}
json_encode($data);