簡體   English   中英

當數組已包含 JSON 字符串時將數組轉換為 JSON 字符串

[英]Converting array to JSON string when array already contains JSON strings

我有一個包含 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 字符串,而引號前沒有斜線?

使用 json_decode 將“營養”轉換為數組。

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

然后

echo json_encode($array);

當數組已經包含 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_decodejson數據進行json_decode ,然后將其放回原始數組。 之后,您可以再次對整個數組進行編碼以獲得所需的輸出。

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

json_encode($data);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM