Formattazione del response da json su php

di il
12 risposte

Formattazione del response da json su php

Buongiorno a tutti, sono appena entrato a far parte di questo forum e avrei un problema da sottoporvi.
E' da poco tempo che lavoro in php e ancor meno che utilizzo i web services. Ho fatto una connessione a un web service e, testandola da Postman funziona correttamente. Ho provato allora a creare il file php che allego, il quale si connette al web service e restituisce correttamente i valori del response.

La connessione al web service viene eseguita correttamente e il risultato (corretto) che ottengo è il seguente:

{"availabilities":[{"room_type_id":1,"from":"2020-04-03","to":"2020-04-05","physical":3,"web_availability":["-","-","-"],"real_availability":[3,3,3]},{"room_type_id":2,"from":"2020-04-03","to":"2020-04-05","physical":2,"web_availability":["-","-","-"],"real_availability":[2,2,2]}]}
Quindi funziona tutto. L'unico problema che ho è quello che non riesco a produrre un output formattato nel seguente modo:
room_type_id, from, to, real_availability
room_type_id, from, to, real_availability

Se c'è qualcuno è in grado di darmi una mano, mi aiuterebbe molto. Grazie

Diego

12 Risposte

  • Re: Formattazione del response da json su php

    Così esposto senza codice php è un po fuorviante... Se la risposta json contiene più elementi di quelli che a te servono li devi filtrare... non c'è altra scelta.
    Funzione per convertire un un'oggetto json in una variabile php https://www.php.net/manual/en/function.json-decode.ph
  • Re: Formattazione del response da json su php

    Il codice php lo trovi nel file allegato. Ciao e grazie
  • Re: Formattazione del response da json su php

    Ciao, anche io sono nuovo, anzi nuovissimo: mi sembra la soluzione sia questa.
    <?php

    $stringa='{"availabilities":[{"room_type_id":1,"from":"2020-04-03","to":"2020-04-05","physical":3,"web_availability":["-","-","-"],"real_availability":[3,3,3]},{"room_type_id":2,"from":"2020-04-03","to":"2020-04-05","physical":2,"web_availability":["-","-","-"],"real_availability":[2,2,2]}]}';
    $json=json_decode($stringa,true); //true=-> decodifica creando un array

    // loop in ogni elemento degli arrays
    foreach($json as $infos){
    foreach($infos as $info){
    echo $info['room_type_id'].' '.$info['from'].' '.$info['to'].'<br/>';
    }
    }

    ?>
  • Re: Formattazione del response da json su php

    Ops....non ha mantenuto l'indent per una corretta lettura del source.....
  • Re: Formattazione del response da json su php

    Serginho ha scritto:


    Ciao, anche io sono nuovo, anzi nuovissimo: mi sembra la soluzione sia questa.
    <?php

    $stringa='{"availabilities":[{"room_type_id":1,"from":"2020-04-03","to":"2020-04-05","physical":3,"web_availability":["-","-","-"],"real_availability":[3,3,3]},{"room_type_id":2,"from":"2020-04-03","to":"2020-04-05","physical":2,"web_availability":["-","-","-"],"real_availability":[2,2,2]}]}';
    $json=json_decode($stringa,true); //true=-> decodifica creando un array

    // loop in ogni elemento degli arrays
    foreach($json as $infos){
    foreach($infos as $info){
    echo $info['room_type_id'].' '.$info['from'].' '.$info['to'].'<br/>';
    }
    }

    ?>
    Ciao,

    per come è composto l'oggetto JSON potresti anche usare un solo foreach
    
    foreach($json['availabilities'] as $info) {
        echo $info['room_type_id'].', '.$info['from'].', '.$info['to'].','.$info['real_availability'][0].' '.$info['real_availability'][1].' '.$info['real_availability'][2].'<br/>';
    }
    
  • Re: Formattazione del response da json su php

    Corretto. Non ho pensato ad aggiungere al primo ciclo la [availabilities], evitando così un for.
  • Re: Formattazione del response da json su php

    Mi ero proprio perso in un bicchiere d'acqua ... grazie mille ad entrambi, mi avete risolto un bel problema.
  • Re: Formattazione del response da json su php

    Scusate, un'ultima cosa:
    nell'array risultante da quanto sopra(room_types) è contenuto un secondo array (rate_plans), come potete vedere di seguito:
    
    {"room_types":[{"id":1,"description":"DOUBLE","number_of_guest":2,"max_number_of_guest":2,"rate_manager_code":"DOUBLE","rate_plans":[{"id":2,"description":"NOT REF","web_available":false,"defaultPriceList":false,"validity_from":"2018-03-12","validity_to":"2030-03-12","channel_manager_code":"NOT REF","rate_manager_code":"NOT REF","extra_meal_parameters":false,"breakfast":false,"lunch":false,"dinner":false,"all_inclusive":false},{"id":1,"description":"STANDARD","web_available":false,"defaultPriceList":true,"validity_from":"2018-03-12","validity_to":"2030-03-12","channel_manager_code":"STANDARD","rate_manager_code":"STANDARD","extra_meal_parameters":false,"breakfast":false,"lunch":false,"dinner":false,"all_inclusive":false}]},{"id":2,"description":"FAMILY","number_of_guest":4,"max_number_of_guest":4,"rate_manager_code":"FAMILY","rate_plans":[{"id":2,"description":"NOT REF","web_available":false,"defaultPriceList":false,"validity_from":"2018-03-12","validity_to":"2030-03-12","channel_manager_code":"NOT REF","rate_manager_code":"NOT REF","extra_meal_parameters":false,"breakfast":false,"lunch":false,"dinner":false,"all_inclusive":false},{"id":1,"description":"STANDARD","web_available":false,"defaultPriceList":true,"validity_from":"2018-03-12","validity_to":"2030-03-12","channel_manager_code":"STANDARD","rate_manager_code":"STANDARD","extra_meal_parameters":false,"breakfast":false,"lunch":false,"dinner":false,"all_inclusive":false}]}]}
    
    Non riesco a capire come estrarre anche i valori "id", ""validity_from" e "validity_to" dal secondo array, aggiungendoli a quelli del primo array.
    Grazie ancora
  • Re: Formattazione del response da json su php

    Fai il decode del JSON facendoti restituire un array e stampalo con var_dump così da avere chiara la struttura di tutto l'array
    
    array(1) {
      ["room_types"]=>
      array(2) {
        [0]=>
        array(6) {
          ["id"]=>
          int(1)
          ["description"]=>
          string(6) "DOUBLE"
          ["number_of_guest"]=>
          int(2)
          ["max_number_of_guest"]=>
          int(2)
          ["rate_manager_code"]=>
          string(6) "DOUBLE"
          ["rate_plans"]=>
          array(2) {
            [0]=>
            array(13) {
              ["id"]=>
              int(2)
              ["description"]=>
              string(7) "NOT REF"
              ["web_available"]=>
              bool(false)
              ["defaultPriceList"]=>
              bool(false)
              ["validity_from"]=>
              string(10) "2018-03-12"
              ["validity_to"]=>
              string(10) "2030-03-12"
              ["channel_manager_code"]=>
              string(7) "NOT REF"
              ["rate_manager_code"]=>
              string(7) "NOT REF"
              ["extra_meal_parameters"]=>
              bool(false)
              ["breakfast"]=>
              bool(false)
              ["lunch"]=>
              bool(false)
              ["dinner"]=>
              bool(false)
              ["all_inclusive"]=>
              bool(false)
            }
            [1]=>
            array(13) {
              ["id"]=>
              int(1)
              ["description"]=>
              string(8) "STANDARD"
              ["web_available"]=>
              bool(false)
              ["defaultPriceList"]=>
              bool(true)
              ["validity_from"]=>
              string(10) "2018-03-12"
              ["validity_to"]=>
              string(10) "2030-03-12"
              ["channel_manager_code"]=>
              string(8) "STANDARD"
              ["rate_manager_code"]=>
              string(8) "STANDARD"
              ["extra_meal_parameters"]=>
              bool(false)
              ["breakfast"]=>
              bool(false)
              ["lunch"]=>
              bool(false)
              ["dinner"]=>
              bool(false)
              ["all_inclusive"]=>
              bool(false)
            }
          }
        }
        [1]=>
        array(6) {
          ["id"]=>
          int(2)
          ["description"]=>
          string(6) "FAMILY"
          ["number_of_guest"]=>
          int(4)
          ["max_number_of_guest"]=>
          int(4)
          ["rate_manager_code"]=>
          string(6) "FAMILY"
          ["rate_plans"]=>
          array(2) {
            [0]=>
            array(13) {
              ["id"]=>
              int(2)
              ["description"]=>
              string(7) "NOT REF"
              ["web_available"]=>
              bool(false)
              ["defaultPriceList"]=>
              bool(false)
              ["validity_from"]=>
              string(10) "2018-03-12"
              ["validity_to"]=>
              string(10) "2030-03-12"
              ["channel_manager_code"]=>
              string(7) "NOT REF"
              ["rate_manager_code"]=>
              string(7) "NOT REF"
              ["extra_meal_parameters"]=>
              bool(false)
              ["breakfast"]=>
              bool(false)
              ["lunch"]=>
              bool(false)
              ["dinner"]=>
              bool(false)
              ["all_inclusive"]=>
              bool(false)
            }
            [1]=>
            array(13) {
              ["id"]=>
              int(1)
              ["description"]=>
              string(8) "STANDARD"
              ["web_available"]=>
              bool(false)
              ["defaultPriceList"]=>
              bool(true)
              ["validity_from"]=>
              string(10) "2018-03-12"
              ["validity_to"]=>
              string(10) "2030-03-12"
              ["channel_manager_code"]=>
              string(8) "STANDARD"
              ["rate_manager_code"]=>
              string(8) "STANDARD"
              ["extra_meal_parameters"]=>
              bool(false)
              ["breakfast"]=>
              bool(false)
              ["lunch"]=>
              bool(false)
              ["dinner"]=>
              bool(false)
              ["all_inclusive"]=>
              bool(false)
            }
          }
        }
      }
    }
    
    Ad esempio per prendere il valore del primo id
    echo $json['room_types'][0]['rate_plans'][0]['id'];
    Quindi ad esempio per prendere tutti gli id dovrai fare due cicli foreach annidati
    
    foreach ($json['room_types'] as $room_types) {
        foreach($room_types['rate_plans'] as $rate_plans) {
            echo $rate_plans['id']."<br>";
        }
    }
    
    Non mi vengono in mente librerie per leggere file JSON con strutture complesse però puoi dare un'occhiata qua
  • Re: Formattazione del response da json su php

    Grazie mille, proprio come volevo.

    Un'ultima cosa: per mandare l'output del ciclo foreach in un file di testo, come devo fare ?

    Grazie ancora
  • Re: Formattazione del response da json su php

    Usa la funzione fwrite
    https://www.php.net/manual/en/function.fwrite.ph

    oppure file_put_contents
    https://www.php.net/manual/en/function.file-put-contents.php
  • Re: Formattazione del response da json su php

    Grazie flaviors200
Devi accedere o registrarti per scrivere nel forum
12 risposte