[英]How to decode JSON nested array values in PHP?
所以我有這個JSON字符串:
"{"Jan": [5, 10, 15, 20] ,
"Feb":[20,10,"",22],
"Mar":[5,3,"",4],
"April":[10,"",1,2]
},
{"title":"Test Chart - Month v Value"}"
我試圖提取數據,以便可以訪問每個數據,以便可以遍歷數組並順序輸出數據。
我能想到的最好的方法是簡單地在PHP中創建一個數組數組,將鍵及其值存儲在一起,並進行嵌套的for循環。 因此,數組應如下所示:
[[Jan, 5, 10, 15, 20],[Feb, 20, 10, ,22], [Mar, 5, 3, , 4]]
最后,我想知道如何將該標題值存儲到其自己的變量中。
您的字符串當前不是有效的json,但確實包含兩個有效的json字符串。 json_decode()函數無法按原樣在您的字符串上工作,但在每個有效的json字符串上都可以工作:
<?php
// INVALID JSON STRING - THIS WON'T WORK:
$json = '{"Jan": [5, 10, 15, 20] , "Feb":[20,10,"",22], "Mar":[5,3,"",4], "April":[10,"",1,2]}, {"title":"Test Chart - Month v Value"}';
print_r(json_decode($json));
// This works:
$json = '{"Jan": [5, 10, 15, 20] , "Feb":[20,10,"",22], "Mar":[5,3,"",4], "April":[10,"",1,2]}';
print_r(json_decode($json));
// This works:
$json = '{"title":"Test Chart - Month v Value"}';
print_r(json_decode($json));
?>
理想情況下,您將修復源json,但是它可能會傳遞給您或從您無法控制的系統中檢索。
如果可以安全地假設json始終具有示例中的結構,則可以將字符串拆分成類似以下內容:
if (preg_match_all("/{[^}]*}/", $str, $matches)) {
foreach ($matches[0] AS $json) {
print_r(json_decode($json));
}
}
如果json對象包含其他對象,則此方法將不起作用,這就是為什么它取決於您是否可以安全地假定結構始終相同的原因。
試試這個代碼
<?php
$jsonData = '[{
"Jan": [5, 10, 15, 20],
"Feb": [20, 10, "", 22],
"Mar": [5, 3, "", 4],
"April": [10, "", 1, 2]
}, {
"title": "Test Chart - Month v Value"
}]';
$array = json_decode($jsonData ,true);
$formattedArr = array();
$i = 0;
foreach($array[0] as $key=>$val) {
$formattedArr[$i] = $val;
array_unshift($formattedArr[$i],$key);
$i++;
}
echo "<pre>";
print_r($formattedArr);
?>
您應該將JSON格式化為Barmar建議的格式(檢查您的評論),當前您的JSON字符串格式不正確。
$json = '{"title":"Test Chart - Month v Value", "data": {"Jan": [5, 10, 15, 20], "Feb":[20,10,"",22], "Mar":[5,3,"",4], "April":[10,"",1,2]}}'
這會將字符串更改為以下PHP數組:
print_r($arr = json_decode($json, true));
Array
(
[title] => Test Chart - Month v Value
[data] => Array
(
[Jan] => Array
(
[0] => 5
[1] => 10
[2] => 15
[3] => 20
)
[Feb] => Array
(
[0] => 20
[1] => 10
[2] =>
[3] => 22
)
[Mar] => Array
(
[0] => 5
[1] => 3
[2] =>
[3] => 4
)
[April] => Array
(
[0] => 10
[1] =>
[2] => 1
[3] => 2
)
)
)
現在您可以像這樣訪問數據:
echo $arr['title'];
print_r($arr['data']);
print_r($arr['data']['Jan']);
$data = '{"Jan": [5, 10, 15, 20] , "Feb":[20,10,"",22], "Mar":[5,3,"",4], "April":[10,"",1,2],"title":"Test Chart - Month v Value"}';
$out = json_decode($data, true);
$newArray = array();
foreach ($out as $key=>$value){
if(is_array($value)){
foreach($value as $key1=>$row){
$value[$key1+1] = $row;
}
$value[0] = $key;
$newArray[] = $value;
}
}
echo json_encode($newArray);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.