
階層の深さが不明な多次元連想配列(JSONオブジェクト)のネストされた全てのノードにアクセスします。
ツリー情報を要素ごとに再帰的に取得し、全ての要素の親子関係を網羅するサンプルコードを掲載します。
コード
サンプルとして下記のJSONを用います。
{
"Description": "SampleJson",
"Copyright": "Copyright (C) 2018 mio.yokohama All Rights Reserved.",
"Status": "200",
"CompressType": "",
"Feature": [
{
"Id": "0106001",
"Name": "うーメン",
"Property": {
"first": {
"second": {
"third": {
"target": "3rd",
"fifth": {
"sixth": {
"Target": "6th"
},
"Target": "5th"
}
}
},
"Target": "1st"
}
}
}
],
"Dictionary": {
"Genre": [
{
"Id": "01",
"Name": "土えもの付属うーメン",
"bool": "True",
"Level": 1
},
{
"Id": "0106",
"Name": "ビーノレ",
"bool": false,
"Level": 2
}
]
}
}
{
"Description": "SampleJson",
"Copyright": "Copyright (C) 2018 mio.yokohama All Rights Reserved.",
"Status": "200",
"CompressType": "",
"Feature": [
{
"Id": "0106001",
"Name": "うーメン",
"Property": {
"first": {
"second": {
"third": {
"target": "3rd",
"fifth": {
"sixth": {
"Target": "6th"
},
"Target": "5th"
}
}
},
"Target": "1st"
}
}
}
],
"Dictionary": {
"Genre": [
{
"Id": "01",
"Name": "土えもの付属うーメン",
"bool": "True",
"Level": 1
},
{
"Id": "0106",
"Name": "ビーノレ",
"bool": false,
"Level": 2
}
]
}
}
{ "Description": "SampleJson", "Copyright": "Copyright (C) 2018 mio.yokohama All Rights Reserved.", "Status": "200", "CompressType": "", "Feature": [ { "Id": "0106001", "Name": "うーメン", "Property": { "first": { "second": { "third": { "target": "3rd", "fifth": { "sixth": { "Target": "6th" }, "Target": "5th" } } }, "Target": "1st" } } } ], "Dictionary": { "Genre": [ { "Id": "01", "Name": "土えもの付属うーメン", "bool": "True", "Level": 1 }, { "Id": "0106", "Name": "ビーノレ", "bool": false, "Level": 2 } ] } }
サンプル(親子関係網羅)
末端要素とその全ての親を再帰的に処理するコードを書きました。
サンプルでは標準出力しています。
出力結果
Description|SampleJson
Copyright|Copyright (C) 2018 mio.yokohama All Rights Reserved.
Status|200
CompressType|
Feature|0|Id|0106001
Feature|0|Name|うーメン
Feature|0|Property|first|second|third|target|3rd
Feature|0|Property|first|second|third|fifth|sixth|Target|6th
Feature|0|Property|first|second|third|fifth|Target|5th
Feature|0|Property|first|Target|1st
Dictionary|Genre|0|Id|01
Dictionary|Genre|0|Name|土えもの付属うーメン
Dictionary|Genre|0|bool|True
Dictionary|Genre|0|Level|1
Dictionary|Genre|1|Id|0106
Dictionary|Genre|1|Name|ビーノレ
Dictionary|Genre|1|bool|false
Dictionary|Genre|1|Level|2
Description|SampleJson
Copyright|Copyright (C) 2018 mio.yokohama All Rights Reserved.
Status|200
CompressType|
Feature|0|Id|0106001
Feature|0|Name|うーメン
Feature|0|Property|first|second|third|target|3rd
Feature|0|Property|first|second|third|fifth|sixth|Target|6th
Feature|0|Property|first|second|third|fifth|Target|5th
Feature|0|Property|first|Target|1st
Dictionary|Genre|0|Id|01
Dictionary|Genre|0|Name|土えもの付属うーメン
Dictionary|Genre|0|bool|True
Dictionary|Genre|0|Level|1
Dictionary|Genre|1|Id|0106
Dictionary|Genre|1|Name|ビーノレ
Dictionary|Genre|1|bool|false
Dictionary|Genre|1|Level|2
Description|SampleJson Copyright|Copyright (C) 2018 mio.yokohama All Rights Reserved. Status|200 CompressType| Feature|0|Id|0106001 Feature|0|Name|うーメン Feature|0|Property|first|second|third|target|3rd Feature|0|Property|first|second|third|fifth|sixth|Target|6th Feature|0|Property|first|second|third|fifth|Target|5th Feature|0|Property|first|Target|1st Dictionary|Genre|0|Id|01 Dictionary|Genre|0|Name|土えもの付属うーメン Dictionary|Genre|0|bool|True Dictionary|Genre|0|Level|1 Dictionary|Genre|1|Id|0106 Dictionary|Genre|1|Name|ビーノレ Dictionary|Genre|1|bool|false Dictionary|Genre|1|Level|2
コード
<?php
$json_string = '〜省略(JsonStrings)〜';
$json_array = json_decode($json_string, true);
getArrayElementsRecursively($json_array);
function getArrayElementsRecursively($array, $depth = 0, $index = array(), $strings = "") {
foreach ((array)$array as $key => $value) {
for ($i = 0;$i < $depth;$i++) $strings.= $index[$i] . "|";
if (!is_array($key)) {
$index[$depth] = $key;
$strings.= $key . "|";
}
if (is_array($value)) {
$strings = "";
$depth++;
getArrayElementsRecursively($value, $depth, $index, $strings);
$depth--;
} else {
if (is_bool($value)) $value = ((true === $value) ? 'true' : 'false');
$strings.= strval($value) . PHP_EOL;
}
echo $strings;
$strings = "";
}
}
?>
<?php
$json_string = '〜省略(JsonStrings)〜';
$json_array = json_decode($json_string, true);
getArrayElementsRecursively($json_array);
function getArrayElementsRecursively($array, $depth = 0, $index = array(), $strings = "") {
foreach ((array)$array as $key => $value) {
for ($i = 0;$i < $depth;$i++) $strings.= $index[$i] . "|";
if (!is_array($key)) {
$index[$depth] = $key;
$strings.= $key . "|";
}
if (is_array($value)) {
$strings = "";
$depth++;
getArrayElementsRecursively($value, $depth, $index, $strings);
$depth--;
} else {
if (is_bool($value)) $value = ((true === $value) ? 'true' : 'false');
$strings.= strval($value) . PHP_EOL;
}
echo $strings;
$strings = "";
}
}
?>
<?php $json_string = '〜省略(JsonStrings)〜'; $json_array = json_decode($json_string, true); getArrayElementsRecursively($json_array); function getArrayElementsRecursively($array, $depth = 0, $index = array(), $strings = "") { foreach ((array)$array as $key => $value) { for ($i = 0;$i < $depth;$i++) $strings.= $index[$i] . "|"; if (!is_array($key)) { $index[$depth] = $key; $strings.= $key . "|"; } if (is_array($value)) { $strings = ""; $depth++; getArrayElementsRecursively($value, $depth, $index, $strings); $depth--; } else { if (is_bool($value)) $value = ((true === $value) ? 'true' : 'false'); $strings.= strval($value) . PHP_EOL; } echo $strings; $strings = ""; } } ?>