Ik probeer JSON index met meerdere niveau's te onleden in php om vervolgens in bv. niveau 4 data toe te voegen en dan weer terug te schrijven naar JSON.
ben al een stukie:
<?php
// orginele json data
$data = file_get_contents(plugin_dir_path( __FILE__ ) . 'data1.json');
$map_data = json_decode($data, true);
// extra data wat samengevoegd moet worden
$str = file_get_contents(plugin_dir_path( __FILE__ ) . 'data2.json');
$top_data = json_decode($str, true);
$outputs = array();
$output = array();;
$locations = array();
$persons = array();
$apparatuur = array();
$outputs['mapwidth'] = $map_data['mapwidth'];
$outputs['mapheight'] = $map_data['mapheight'];
// niveau 1
$niveau1 = array();
foreach ($map_data['levels'] as $level) {
$output['id'] = $level['id'];
// niveau 2
$niveau2 = array();
foreach ($level['categories'] as $categorie) {
array_push($niveau2, $categorie);
}
$output['categories'] = $niveau2;
// niveau 3
$niveau3 = array();
foreach ($level['locations'] as $location) {
$locations ['id'] = $location['id'];
// niveau 4.1
$niveau4 = array();
foreach ($location['persons'] as $person) {
$persons ['naam'] = $person['title'];
array_push($niveau4, $persons);
}
$locations['persons'] = $niveau4;
// niveau 4.2
$niveau5 = array();
foreach ($top_data['apparaat'] as $apparaat) {
if ($locations ['id'] == $apparaat['id']){
$apparatuur ['naam'] = $apparaat['naam'];
array_push($niveau5, $apparatuur);
}
}
$locations['apparatuur'] = $niveau5;
array_push($niveau3, $locations);
}
$output['locations'] = $niveau3;
array_push($niveau1, $output);
}
$outputs['levels'] = $niveau1;
$outputs['maxscale'] = $map_data['maxscale'];
print_r(json_encode($outputs));
?>
Data1.json:
{
"mapwidth":"1000",
"mapheight":"800",
"levels":[{
"id":"A.01",
"categories":["1""2","3","4","5"],
"locations":[{
"id":"A.01.2",
"persons":{
"naam":"piet"
}],
"apparatuur":[]
}]
}],
"maxscale":4
}
Data2.json:
{
"apparaat":[
{
"naam": "Koffiemachine",
"lokatie": "A.01.2",
"id": "KO00088"
},
{
"naam": "Broodrooster",
"lokatie": "A.01.3",
"id": "BR00201"
},
{
"naam": "Magnetron",
"lokatie": "A.02.1",
"id": "MA00901"
}]
}
De output is:
{
"mapwidth":"1000",
"mapheight":"800",
"levels":[{
"id":"A.01",
"categories":["1""2","3","4","5"],
"locations":[{
"id":"A.01.2",
"persons":{
"naam":"Piet"
},
{
"naam":"Henk"
},
{
"naam":"Sjaak"
}],
"apparatuur":[{
"naam":"koffiemachine"
}]
}]
}],
"maxscale":4
}
Opzich prima alleen bij "persons" wordt maar 1 resultaat weergeven inplaats meerderen.. wordt er misschien wat overschreven?