Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Come accedere a elemento di oggetto PHP tramite "indice" creato programmaticamente

    Ho questo file JSON: http://haya2now.jp/data/data.json

    Una volta letto e decodificato con $json_dump=json_decode($file_contents) , come faccio ad accedere all'elemento che ha percorso geometry[6]->obs[1]->sun->azm , ma specificando tale percorso come variabile, in modo da poterlo costruire dinamicamente come mi pare?
    ho provato così:

    codice:
    $path = 'geometry[6]->obs[1]->sun->azm';
    echo $json_dump->{$path};
    ma mi dà:
    codice:
    Undefined property: stdClass::$geometry[6]->obs[1]->sun->azm
    Quello che vorrei ottenere alla fine è una pagina PHP che prende come parametro il percorso dell'oggetto, lo estrae dal file JSON e scrive a schermo il valore di quell'elemento.
    -- JumpJack --

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,689
    Quote Originariamente inviata da jumpjack Visualizza il messaggio
    [...] ma specificando tale percorso come variabile, in modo da poterlo costruire dinamicamente come mi pare?
    Dove vuoi specificarlo? Nell'indirizzo della pagina come parametro get?

    Non essendo sicuro di ciò che vuoi fare, ti lascio comunque questo codice per darti un'idea di cosa potresti fare, magari ti torna utile ugualmente.

    Codice PHP:
    /*
    Come link per arrivare al tuo script usi una URL di questo tipo
    http://sito.com/script.php?path=geometry-6-obs-1-sun-azm
    */

    // prendi i dati dal link
    $dati file_get_contents('http://haya2now.jp/data/data.json');

    // trasformi l'array JSON in array PHP, non in oggetto, impostando a true il secondo parametro
    $dati json_decode($datitrue);

    // prendi dalla URL il path scomponendolo in un array
    $path explode('-'$_GET['path']);

    // stampi il dato che ti interessa
    print_r$dati$path[0] ][ $path[1] ][ $path[2] ][ $path[3] ][ $path[4] ][ $path[5] ] ); 

  3. #3
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Dove vuoi specificarlo? Nell'indirizzo della pagina come parametro get?

    Non essendo sicuro di ciò che vuoi fare, ti lascio comunque questo codice per darti un'idea di cosa potresti fare, magari ti torna utile ugualmente.

    Codice PHP:
    /*
    Come link per arrivare al tuo script usi una URL di questo tipo
    http://sito.com/script.php?path=geometry-6-obs-1-sun-azm
    */

    // prendi i dati dal link
    $dati file_get_contents('http://haya2now.jp/data/data.json');

    // trasformi l'array JSON in array PHP, non in oggetto, impostando a true il secondo parametro
    $dati json_decode($datitrue);

    // prendi dalla URL il path scomponendolo in un array
    $path explode('-'$_GET['path']);

    // stampi il dato che ti interessa
    print_r$dati$path[0] ][ $path[1] ][ $path[2] ][ $path[3] ][ $path[4] ][ $path[5] ] ); 
    Non va bene, il problema è proprio riuscire ad accedere usando la stessa stringa che si userebbe nel codice.
    In PHP proprio non mi riesce, ma sono riuscito a ovviare in javascript:

    https://programmi.000webhostapp.com/...html?filename=http://haya2now.jp/data/data.json&key=geometry[0].obs[0].hayabusa2.azm

    Aprendo invece il link senza parametri, mostra i percorsi di tutti gli oggetti:
    https://programmi.000webhostapp.com/...n-querier.html
    -- JumpJack --

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,689
    Scusa il ritardo, ma non è stata notificata la tua risposta, risultava sempre la mia come ultima.
    Nel tuo esempio iniziale non provi ad accedere al dato con la stringa che ti arriva.
    Dal codice qui sopra ti arriva
    geometry[0].obs[0].hayabusa2.azm

    tu dicevi di voler accedere con
    geometry[6]->obs[1]->sun->azm

    Il tuo problema è che non puoi modificare il link da cui arrivi sulla pagina?
    In tal caso trasforma
    geometry[0].obs[0].hayabusa2.azm

    nel formato che ti ho proposto io.
    A quanto ho capito geometry ed obs ci sono sempre, quindi ti basterebbe prendere i numeri nelle parentesi quadre e le ultime 2 stringhe, è un po' più macchinoso il sistema per recuperare questi valori, ma fattibile.

    Se invece proprio devi usare per forza quella stringa così com'è, un'altra soluzione protrebbe essere recuperare i risultati dell'ultimo link che hai postato all'interno di un array e da lì andare a prendere la riga corrispondente.
    Ultima modifica di Alhazred; 03-12-2019 a 12:32

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.