Data toevoegen aan JSON
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?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));
?>
// 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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"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
}
"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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"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"
}]
}
"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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"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
}
"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?
Gewijzigd op 15/12/2015 11:21:32 door Chris van Kesteren
JMSserializer of SpraySerializer.
Of misschien zelfs gewoon objecten maken en json_encode() gebruiken.
Je maakt het jezelf nu te moeilijk denk ik.
Waarom maak je er niet een array van en zet je die om met Of misschien zelfs gewoon objecten maken en json_encode() gebruiken.
Je maakt het jezelf nu te moeilijk denk ik.
@Chris: misschien wordt het wat duidelijker als je de 2 stuks invoer ook bij je code plaatst.
Nu is het een magische machine waar een output uitkomt die kennelijk niet is wat je verwacht.
De data heb ik wel wat versimpeld in werkelijkheid gaat het over grotere lijsten, leek mij een beetje om overzichtelijk om dit hier te plaatsen.
Wat ik wil bereiken is data toe te voegen aan de "apparatuur" array
Wat is de output die je wel wilde hebben?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
{
"mapwidth":"1000",
"mapheight":"800",
"categories":[
{
"id":"1",
"title":"divers",
"color":"#3498db",
"show":"false"
},
{
"id":"2",
"title":"Secretariaat",
"color":"#dd6eb5",
"show":"false"
},
{
"id":"3",
"title":"Multimedia",
"color":"#70caf3",
"show":"false"
},
{
"id":"4",
"title":"Administratie",
"color":"#2c4a9a",
"show":"false"
}
],
"levels":[{
"id":"A.01",
"categories":["1","2","3","4"],
"locations":[{
"id":"A.01.2",
"title":"",
"description":"Kantoor",
"image":"kamer.jpg",
"category":"4",
"persons":[{
"naam":"henk",
"functie":"administratie",
"tel":"1234-1234",
"email":"[email protected]",
"image":"henk.png"
}],
"apparatuur":[{
"title":"Koffiemachine",
"fabrik":"siemens",
"type":"awesome",
"invent":"123",
"image":"DSC_37252.png"
},
{
"title":"magentrom",
"fabrik":"philips",
"type":"hot",
"invent":"321",
"image":"DSC_37251.png"
}]
},
{
"id":"A.01.3",
"title":"",
"description":"magazijn",
"image":"magazijn.jpg",
"category":"1",
"persons":[{}],
"apparatuur":[{
"title":"versnipperaar",
"fabrik":"siemens",
"type":"nom",
"invent":"345",
"image":"DSC_37254.png"
}]
}]
}]
},
{
"id":"B.01",
"categories":["1","2","3","4"],
"locations":[{
"id":"B.01.1",
"title":"",
"description":"Kantoor",
"image":"kamer.jpg",
"category":"4",
"persons":[{
"naam":"Jaap",
"functie":"Grafisch vormgever",
"tel":"1234-1234",
"email":"[email protected]",
"image":"Jaap.png"
},
{
"naam":"Sjaak",
"functie":"Grafisch vormgever",
"tel":"1234-1234",
"email":"[email protected]",
"image":"Sjaak.png"
}],
"apparatuur":[{
"title":"Koffiemachine",
"fabrik":"siemens",
"type":"awesome",
"invent":"123",
"image":"DSC_37252.png"
}]
}]
}]
}],
"maxscale":4
}
"mapwidth":"1000",
"mapheight":"800",
"categories":[
{
"id":"1",
"title":"divers",
"color":"#3498db",
"show":"false"
},
{
"id":"2",
"title":"Secretariaat",
"color":"#dd6eb5",
"show":"false"
},
{
"id":"3",
"title":"Multimedia",
"color":"#70caf3",
"show":"false"
},
{
"id":"4",
"title":"Administratie",
"color":"#2c4a9a",
"show":"false"
}
],
"levels":[{
"id":"A.01",
"categories":["1","2","3","4"],
"locations":[{
"id":"A.01.2",
"title":"",
"description":"Kantoor",
"image":"kamer.jpg",
"category":"4",
"persons":[{
"naam":"henk",
"functie":"administratie",
"tel":"1234-1234",
"email":"[email protected]",
"image":"henk.png"
}],
"apparatuur":[{
"title":"Koffiemachine",
"fabrik":"siemens",
"type":"awesome",
"invent":"123",
"image":"DSC_37252.png"
},
{
"title":"magentrom",
"fabrik":"philips",
"type":"hot",
"invent":"321",
"image":"DSC_37251.png"
}]
},
{
"id":"A.01.3",
"title":"",
"description":"magazijn",
"image":"magazijn.jpg",
"category":"1",
"persons":[{}],
"apparatuur":[{
"title":"versnipperaar",
"fabrik":"siemens",
"type":"nom",
"invent":"345",
"image":"DSC_37254.png"
}]
}]
}]
},
{
"id":"B.01",
"categories":["1","2","3","4"],
"locations":[{
"id":"B.01.1",
"title":"",
"description":"Kantoor",
"image":"kamer.jpg",
"category":"4",
"persons":[{
"naam":"Jaap",
"functie":"Grafisch vormgever",
"tel":"1234-1234",
"email":"[email protected]",
"image":"Jaap.png"
},
{
"naam":"Sjaak",
"functie":"Grafisch vormgever",
"tel":"1234-1234",
"email":"[email protected]",
"image":"Sjaak.png"
}],
"apparatuur":[{
"title":"Koffiemachine",
"fabrik":"siemens",
"type":"awesome",
"invent":"123",
"image":"DSC_37252.png"
}]
}]
}]
}],
"maxscale":4
}
http://php.net/manual/en/function.json-decode.php
Vervolgens heb je een PHP variabele die je kunt wijzigen.
Zolang je weet waar je wilt wijzigen moet dit geen probleem zijn lijkt me.
En vervolgens weer een encode:
http://php.net/manual/en/function.json-encode.php
Gewijzigd op 15/12/2015 13:22:19 door Peter K
Simpel weg door een "&" tekenen toe te voegen in de foreach loop werkt het wel..: