Ich arbeite mit einem Remote-XML, das ich zu JSON analysieren muss, um Informationen an eine mobile Anwendung zu übertragen. Ich benutze json_encode zu so.json_encode Ziel spezifischer Knoten, Array zu erhalten
Mein Problem ist, dass es für einen bestimmten Knoten manchmal ein Array ist, manchmal ist es ein Wörterbuch. Ich müsste diesen spezifischen Knoten zielen und es immer ein Array machen.
Meine App stürzt ab, wenn es ein Wörterbuch und kein Array ist, also muss ich [...].
Mein xml wie folgt aussieht:
<infogeneral>
<idspotwebcamhd>6</idspotwebcamhd>
<spot>Anglet Sables d'Or</spot>
<url/>
<vagues/>
<vent>GFS</vent>
<ventdate>2016-04-12 06:00:00</ventdate>
<venttimestamp>1460433600</venttimestamp>
<houle>WW3</houle>
<houledate>2016-04-12 06:00:00</houledate>
<houletimestamp>1460433600</houletimestamp>
<tempeaucelsius>13</tempeaucelsius>
</infogeneral>
<day>
<date>Tue 12 Apr 2016</date>
<datetimestamp>1460484000</datetimestamp>
<firstlight>06:55</firstlight>
<lastlight>21:17</lastlight>
<creneau>
<heure>20.00</heure>
<timestamp>1460484000</timestamp>
<ventnoeud>9</ventnoeud>
<ventms/>
<ventkmh>17</ventkmh>
<ventbft/>
<ventmph/>
<houlemetre>1.10</houlemetre>
<houlepied/>
<periode>12</periode>
<temp>15</temp>
<ventdirection>so</ventdirection>
<houledirection>ono</houledirection>
<pictogramme>3cloud_lightrain.png</pictogramme>
</creneau>
</day>
<day>
<date>Wed 13 Apr 2016</date>
<datetimestamp>1460505600</datetimestamp>
<firstlight>06:53</firstlight>
<lastlight>21:18</lastlight>
<principal>
<heure>14:00</heure>
<pictogrammeprincipal>1cloud_norain.png</pictogrammeprincipal>
<tempmincelsius>13</tempmincelsius>
<tempmaxcelsius>17</tempmaxcelsius>
</principal>
<creneau>
<heure>08.00</heure>
<timestamp>1460527200</timestamp>
<ventnoeud>17</ventnoeud>
<ventms/>
<ventkmh>32</ventkmh>
<ventbft/>
<ventmph/>
<houlemetre>1.20</houlemetre>
<houlepied/>
<periode>10</periode>
<temp>13</temp>
<ventdirection>sso</ventdirection>
<houledirection>ono</houledirection>
<pictogramme>4cloud_norain.png</pictogramme>
</creneau>
<creneau>
<heure>11.00</heure>
<timestamp>1460538000</timestamp>
<ventnoeud>19</ventnoeud>
<ventms/>
<ventkmh>36</ventkmh>
<ventbft/>
<ventmph/>
<houlemetre>1.40</houlemetre>
<houlepied/>
<periode>6</periode>
<temp>15</temp>
<ventdirection>so</ventdirection>
<houledirection>so</houledirection>
<pictogramme>2cloud_norain.png</pictogramme>
</creneau>
<creneau>
<heure>14.00</heure>
<timestamp>1460548800</timestamp>
<ventnoeud>16</ventnoeud>
<ventms/>
<ventkmh>29</ventkmh>
<ventbft/>
<ventmph/>
<houlemetre>1.30</houlemetre>
<houlepied/>
<periode>6</periode>
<temp>17</temp>
<ventdirection>oso</ventdirection>
<houledirection>so</houledirection>
<pictogramme>1cloud_norain.png</pictogramme>
</creneau>
<creneau>
<heure>17.00</heure>
<timestamp>1460559600</timestamp>
<ventnoeud>7</ventnoeud>
<ventms/>
<ventkmh>13</ventkmh>
<ventbft/>
<ventmph/>
<houlemetre>1.00</houlemetre>
<houlepied/>
<periode>5</periode>
<temp>17</temp>
<ventdirection>no</ventdirection>
<houledirection>oso</houledirection>
<pictogramme>0cloud.png</pictogramme>
</creneau>
<creneau>
<heure>20.00</heure>
<timestamp>1460570400</timestamp>
<ventnoeud>4</ventnoeud>
<ventms/>
<ventkmh>7</ventkmh>
<ventbft/>
<ventmph/>
<houlemetre>0.80</houlemetre>
<houlepied/>
<periode>10</periode>
<temp>15</temp>
<ventdirection>ne</ventdirection>
<houledirection>ono</houledirection>
<pictogramme>0cloud.png</pictogramme>
</creneau>
</day>
Mein PHP XML zu JSON konvertieren (ich eine XML-Datei laden eine JSON-Datei zu speichern):
$xml = simplexml_load_file($in_filepath);
$json = json_encode($xml);
file_put_contents ($out_filepath, $json);
Für meine Prüfungen vor der Produktion, mein php wie folgt aussieht:
$xml = simplexml_load_file('http://www.example.com/myFile.xml');
$json = json_encode($xml);
print_r($json);
Nach json_encode:
"infogeneral":{
"idspotwebcamhd":"6",
"spot":"Anglet Sables d'Or",
"url":{
},
"vagues":{
},
"vent":"GFS",
"ventdate":"2016-04-12 06:00:00",
"venttimestamp":"1460433600",
"houle":"WW3",
"houledate":"2016-04-12 06:00:00",
"houletimestamp":"1460433600",
"tempeaucelsius":"13"
},
"day":[
{
"date":"Tue 12 Apr 2016",
"datetimestamp":"1460484000",
"firstlight":"06:55",
"lastlight":"21:17",
"creneau":{
"heure":"20.00",
"timestamp":"1460484000",
"ventnoeud":"9",
"ventms":{
},
"ventkmh":"17",
"ventbft":{
},
"ventmph":{
},
"houlemetre":"1.10",
"houlepied":{
},
"periode":"12",
"temp":"15",
"ventdirection":"so",
"houledirection":"ono",
"pictogramme":"3cloud_lightrain.png"
}
},
{
"date":"Wed 13 Apr 2016",
"datetimestamp":"1460505600",
"firstlight":"06:53",
"lastlight":"21:18",
"principal":{
"heure":"14:00",
"pictogrammeprincipal":"1cloud_norain.png",
"tempmincelsius":"13",
"tempmaxcelsius":"17"
},
"creneau":[
{
"heure":"08.00",
"timestamp":"1460527200",
"ventnoeud":"17",
"ventms":{
},
"ventkmh":"32",
"ventbft":{
},
"ventmph":{
},
"houlemetre":"1.20",
"houlepied":{
},
"periode":"10",
"temp":"13",
"ventdirection":"sso",
"houledirection":"ono",
"pictogramme":"4cloud_norain.png"
},
{
"heure":"11.00",
"timestamp":"1460538000",
"ventnoeud":"19",
"ventms":{
},
"ventkmh":"36",
"ventbft":{
},
"ventmph":{
},
"houlemetre":"1.40",
"houlepied":{
},
"periode":"6",
"temp":"15",
"ventdirection":"so",
"houledirection":"so",
"pictogramme":"2cloud_norain.png"
},
{
"heure":"14.00",
"timestamp":"1460548800",
"ventnoeud":"16",
"ventms":{
},
"ventkmh":"29",
"ventbft":{
},
"ventmph":{
},
"houlemetre":"1.30",
"houlepied":{
},
"periode":"6",
"temp":"17",
"ventdirection":"oso",
"houledirection":"so",
"pictogramme":"1cloud_norain.png"
},
{
"heure":"17.00",
"timestamp":"1460559600",
"ventnoeud":"7",
"ventms":{
},
"ventkmh":"13",
"ventbft":{
},
"ventmph":{
},
"houlemetre":"1.00",
"houlepied":{
},
"periode":"5",
"temp":"17",
"ventdirection":"no",
"houledirection":"oso",
"pictogramme":"0cloud.png"
},
{
"heure":"20.00",
"timestamp":"1460570400",
"ventnoeud":"4",
"ventms":{
},
"ventkmh":"7",
"ventbft":{
},
"ventmph":{
},
"houlemetre":"0.80",
"houlepied":{
},
"periode":"10",
"temp":"15",
"ventdirection":"ne",
"houledirection":"ono",
"pictogramme":"0cloud.png"
}
]
},
Für den ersten Tag habe ich nur einen "Creneau", also stürzt er ab.
Ich habe versucht, dies aus: http://www.binarytides.com/convert-simplexml-object-to-array-in-php/
Aber es ändert den ganzen Baum.
Irgendeine Idee, wie ich das schaffen könnte?
* manchmal ist es ein Array, manchmal ist es ein Wörterbuch * ... wie kann das sein, wie xml Node ist weder ein Array noch ein Wörterbuch? Und wo ist dein PHP-Code, um XML einzulesen und den json_encode auszuführen? – Parfait
Ich vielleicht falsch, tut mir leid. "creneau" wird zu einem Array oder Wörterbuch in meiner App, ob ich eine oder mehrere in der XML-Datei habe. Ich habe nur den PHP-Code, den ich verwende. – David