PHP JSON uitlezen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • robbinonline
  • Registratie: September 2007
  • Laatst online: 15:20
Voor een thuisproject probeer ik een weer dashboard te genereren.
Ik maak hier gebruik van de weatherunderground data. Na wat research lukt het me nu JSON data in te laden en te verwerken. Echter loop ik nu vast als de data wat dieper in de JSON lagen zit.

De API geeft deze JSON terug
code:
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
{
  "response": {
  "version":"0.1",
  "termsofService":"http://www.wunderground.com/weather/api/d/terms.html",
  "features": {
  "forecast": 1
  }
    }
        ,
    "forecast":{
        "txt_forecast": {
        "date":"10:48 AM CET",
        "forecastday": [
        {
        "period":0,
        "icon":"partlycloudy",
        "icon_url":"http://icons.wxug.com/i/c/k/partlycloudy.gif",
        "title":"woensdag",
        "fcttext":"Bewolking in de ochtend gevolgd door zon in de middag. Maximaal 36F. Wind uit het OZO van 5 tot 10 mpu.",
        "fcttext_metric":"Bewolking in de ochtend gevolgd door zon in de middag. Maximaal 2C. Wind uit het OZO van 10 tot 15 km/u.",
        "pop":"10"
        }
        ,
        {
        "period":1,
        "icon":"nt_clear",
        "icon_url":"http://icons.wxug.com/i/c/k/nt_clear.gif",
        "title":"woensdagnacht",
        "fcttext":"Overwegend helder. Strenge vorst verwacht. Minimaal 25F. Wind uit het OZO van 5 tot 10 mpu.",
        "fcttext_metric":"Overwegend helder. Strenge vorst verwacht. Minimaal -4C. Wind uit het OZO van 10 tot 15 km/u.",
        "pop":"10"
        }
        ,
        {
        "period":2,
        "icon":"clear",
        "icon_url":"http://icons.wxug.com/i/c/k/clear.gif",
        "title":"donderdag",
        "fcttext":"Overwegend helder. Maximaal 38F. Wind uit het OZO van 10 tot 15 mpu.",
        "fcttext_metric":"Overwegend helder. Maximaal 3C. Wind uit het OZO van 15 tot 25 km/u.",
        "pop":"0"
        }


Voor het inladen van bijvoorbeeld date gebruik ik deze code, dit gaat goed
code:
1
$weerdatum = $parsed_json->{'forecast'}->{'txt_forecast'}->{'date'};


Maar probeer ik op deze manier fcttext (forecast op te halen) krijg ik de foutmelding: Trying to get property of non-object

code:
1
$weervandaag = $parsed_json->{'forecast'}->{'txt_forecast'}->{'forecastday'}->{'0'}->{'fcttext'};


Hoe doe ik dit wel?

...

Ga niet uit van het haalbare, maar van het denkbare

Beste antwoord (via robbinonline op 25-01-2017 12:21)


  • mstx
  • Registratie: Februari 2004
  • Niet online
code:
1
$weervandaag = $parsed_json->forecast->txt_forecast->forecastday[0]->fcttext;

Alle reacties


Acties:
  • +1 Henk 'm!

  • maarud
  • Registratie: Mei 2005
  • Laatst online: 20:54
Weet je het verschil tussen { } en [ ]? :)

De één is een object, waar je properties uit kan vissen, de ander is een array.
De '0' zit in een array, geen object. Dus vandaar dat je de melding krijgt :)

Kijk goed naar de opbouw van het document. Waar zitten de objecten, waar de arrays. Dat maakt het makkelijker :)

edit: Of het antwoord direct geven mag ook idd :+

[ Voor 29% gewijzigd door maarud op 25-01-2017 11:28 ]


Acties:
  • Beste antwoord
  • +2 Henk 'm!

  • mstx
  • Registratie: Februari 2004
  • Niet online
code:
1
$weervandaag = $parsed_json->forecast->txt_forecast->forecastday[0]->fcttext;

Acties:
  • +1 Henk 'm!

  • jbdeiman
  • Registratie: September 2008
  • Laatst online: 13:21
maarud schreef op woensdag 25 januari 2017 @ 11:26:
Weet je het verschil tussen { } en [ ]? :)

De één is een object, waar je properties uit kan vissen, de ander is een array.
De '0' is een array, geen object. Dus vandaar dat je de melding krijgt :)
Hieraan toegevoegd:
{forecastday} is de array, en 0 is de key, zo moet je 'm dan ook in je parser verwerken. De forecastday en 0 horen dus bij elkaar.

Combineer dit met de { } en [ ] opmerking van maarud, dan moet je er wel uit komen.

Antwoord hierboven is gelijk een oplossing voorschrijven, iig als je de opmerking van maarud en deze combineert zal je ook wel begrijpen waarom dat niet werkt.

[ Voor 12% gewijzigd door jbdeiman op 25-01-2017 11:29 ]


Acties:
  • 0 Henk 'm!

  • robbinonline
  • Registratie: September 2007
  • Laatst online: 15:20
Awesome! Bedankt voor alle snelle antwoorden!
Nog een vraag, ik heb nu alles tussen ' en { staan, maar dat is dus niet verplicht?

Ga niet uit van het haalbare, maar van het denkbare


Acties:
  • 0 Henk 'm!

  • jbdeiman
  • Registratie: September 2008
  • Laatst online: 13:21
In principe niet, wat mstx aangeeft als oplossing werkt immers ook. Zelf vind ik het wel netter (prettiger leesbaar) om het op jouw manier te doen.

Anderen zullen zweren bij de schrijfwijze van mstx, maar persoonlijk vind ik dat dit iets is wat van jezelf (of afspraken in 't ontwikkelteam) afhangt.
Pagina: 1