[英]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_decode
對json
數據進行json_decode
,然后將其放回原始數組。 之后,您可以再次對整個數組進行編碼以獲得所需的輸出。
foreach ($data as $datum) {
$data['nutrients'] = json_decode($data['nutrients']);
}
json_encode($data);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.