Php 当数组已包含JSON字符串时,将数组转换为JSON字符串

Php 当数组已包含JSON字符串时,将数组转换为JSON字符串,php,json,Php,Json,我有一个包含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,"

我有一个包含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字符串

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字符串,而引号前面没有斜杠时,如何将其转换为JSON字符串?

使用JSON_decode将“营养素”转换为数组

foreach($array as &$a){
 $a['nutrients'] = json_decode($a['nutrients']); 
}
然后

当数组已经包含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

您应该能够首先对
json
数据进行
json
解码,然后将其放回原始数组。之后,您可以再次对整个数组进行编码,以获得所需的输出

foreach ($data as $datum) {
   $data['nutrients'] = json_decode($data['nutrients']);
}

json_encode($data);

(1) 或者编写一个自定义JSON生成器。(2) 或者解码该数组结构中的jsonish字符串,然后重新编码所有内容。循环数组将每个json字符串分配给一个新数组,替换为占位符,json编码数组,替换原始json字符串?在引号前抛出一个“\”就可以了。JSON属性可以被引用,也可以不被引用。如果不存在不符合常规属性命名标准的空格或字符情况,则不必使用引号。您的问题是,整个字符串中都包含JSON
JSON\u encode()
通常用于编码PHP关联数组,而不是已经是PHP中字符串的JavaScript对象。