Data toevoegen aan JSON

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Chris van Kesteren

Chris van Kesteren

15/12/2015 09:03:47
Quote Anchor link
Goedemorgen,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
}


Data2.json:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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"
    }]
}


De output is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
}


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
 
PHP hulp

PHP hulp

14/11/2024 18:43:49
 

15/12/2015 09:29:12
Quote Anchor link
Waarom maak je er niet een array van en zet je die om met JMSserializer of SpraySerializer.
Of misschien zelfs gewoon objecten maken en json_encode() gebruiken.
Je maakt het jezelf nu te moeilijk denk ik.
 
Ivo P

Ivo P

15/12/2015 09:31:26
Quote Anchor link
hij gebruikt toch json_encode()?

@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.
 
Chris van Kesteren

Chris van Kesteren

15/12/2015 09:44:06
Quote Anchor link
@Ivo P: idd wel handig..
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
 
Ivo P

Ivo P

15/12/2015 10:20:26
Quote Anchor link
ik zie in totaal ook maar 1 persoon?

Wat is de output die je wel wilde hebben?
 
Chris van Kesteren

Chris van Kesteren

15/12/2015 11:49:19
Quote Anchor link
@Ivo P: Sorry slecht voorbeeld.. Het uiteindelijke resultaat zal er meer zo uit zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
{
    "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
}
 
Peter K

Peter K

15/12/2015 13:21:14
Quote Anchor link
Je kunt volgens mij gewoon een decode doen:
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
 
Chris van Kesteren

Chris van Kesteren

15/12/2015 13:39:21
Quote Anchor link
Het lijkt dat ik een oplossing gevonden heb..
Simpel weg door een "&" tekenen toe te voegen in de foreach loop werkt het wel..:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
foreach ($location['persons'] as &$person) {
      $persons ['naam']  = $person['title'];
      array_push($niveau4, $persons);
}
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.