Avatar billede cronck Nybegynder
26. oktober 2009 - 11:03 Der er 3 kommentarer

Læse/parse Json data

Hej eksperter,

Jeg har gennem lidt tid, forsøgt at læse en json-streng fra en ekstern side, ifb. et projekt jeg arbejder på.
Desværre, kan jeg ikke helt gennemskue hvordan jeg skal gøre det, da jeg ikke er vant til at arbejde med objekter. :)

Her er et eks. på selve strengen:
{"122348776":{"guid":"122348776","alias":"is1-abs"},"119180432":{"guid":"119180432","alias":"is1-abv"}}

Har forsøgt at få dette eksempel til at echo'e alle alias'er, men umiddelbart kan jeg ikke finde ud af at referere til "first child", "next" osv. Nummeret som for eks. 122348776 er vilkårligt, som bliver genereret af systemet jeg trækker dataen fra.

Her er eksemplet jeg har forsøgt at få til at virke med mit eget:

$jsonurl = "http://search.twitter.com/trends.json";
$json = file_get_contents($jsonurl,0,null,null);
$json_output = json_decode($json);

foreach ( $json_output->trends as $trend )
{
    echo "{$trend->name}\n";
}

Kan I give mig et finger-peg i den rigtige retning? :)
Avatar billede fant0mas Nybegynder
26. oktober 2009 - 19:00 #1
foreach($json_output->{'trends'} as $val){
echo $val->{'name'};
echo $val->{'url'};
}
Avatar billede fant0mas Nybegynder
26. oktober 2009 - 19:31 #2
Hvis du synes det er lidt svært at overskue et standart dump, så er det her måske noget:

http://jacksleight.com/old/assets/blog/really-shiny/scripts/php-dump.txt

Gem som .php og inkluder den i dit projekt, så kan du bruge funktionen: dump($var);
Det giver en mere grafisk visning af data'en.
Avatar billede preppydude Nybegynder
03. november 2009 - 03:13 #3
Efter hvad jeg kan læse kan det blive konverteret til et simpelt array(). Så, lad os sige jeg havde følgende JSON data:
{
    strvar:"string",
    number:40,
    boolvar:true,
    subobject: {
        substrvar:"sub string",
        subsubobj: {
            deep:"deeply nested"
        },
        strnum:"56"
    },
    false_val:false,
    false_str:"false"
}

Det kunne jeg så tilgå, efter jeg havde brugt json_decode(), på følgende måde:
<?php
$json  = json_decode($data, true); // TRUE gør så det bliver et array og ikke et object
$strvar = $json["strvar"]; // == "string"
$substrvar = $json["subobject"]["substrvar"]; // == "sub string"
$deep  = $json["subobject"]["subsubobj"]["deep"]; // == "deeply nested"
?>

... og her er så hvordan du lister Twitter trends:
<?php
$url  = "http://search.twitter.com/trends.json";
$json = json_decode(file_get_contents($url), true);

printf("<h2>Trends as of %s</h2><ul>", $json["as_of"]);
foreach($json["trends"] as $row) {
  printf("<li><a href=\"java script:window.open('%s');void(0)\">%s</a></li>", $row["url"], $row["name"]);
}
echo("</ul>");
?>

Håber det hjalp lidt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester