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

    Manipolare JSON: da oggetto ad array

    ciao!

    avrei la necessità di modificare un JSON, nello specifico avere sempre un array al posto di un oggetto.

    per fare un esempio, supponiamo di avere questo JSON:
    codice:
    {
      "nome": "matteo",
      "attivita": [
        {
          "sports": "calcio"
        }
      ]
    }
    li dove c'è sports potrebbe anche arrivarmi così:
    codice:
    {
      "nome": "matteo",
      "attivita": [
        {
          "sports": [
            "calcio",
            "tennis"
          ]
        }
      ]
    }
    io dovrei manipolare il JSON nel caso in cui mi arrivi come il primo esempio, e trasformalo in questo modo.
    se invece mi arriva come array, lasciarlo così.
    si può fare secondo voi??

  2. #2
    Da testare:
    Codice PHP:
    $data json_decode($jsontrue);

    foreach (
    $data['attivita'] as &$attivita) {
        foreach (
    $attività as &$valore) {
            
    $valore is_array($valore) ? $valore : [$valore];
        }
    }

    print(
    json_encode($dataJSON_PRETTY_PRINT)); 

  3. #3
    ciao!

    intanto grazie per la risposta.
    ho provato, ma c'è qualcosa che non mi quadra.
    intanto questo è un esempio di json: https://pastebin.com/1zqubDkA

    il campo che mi interessa è interasse.
    ho banalmente provato anche così:
    codice:
    $json = file_get_contents('test.json');
    $data = json_decode($json, true);
    
    
    foreach ($data['richiestaAcquisizioneSchedaControlloFamiglia']['richiestaAcquisizioneSchedaControlloFamigliaM2M3']['dimensioniPrincipali'] as $k => $v) {
      if ($k == 'interasse') {
        if (is_array($v)) {
          echo "ok<br>";
          var_dump($v);
        }
      }
    }
    come puoi vedere interasse non è un array, ma come output ottengo questo:
    codice:
    ok
    array(3) { ["descrizioneValoreDatoTecnicoMinimo"]=> string(4) "5900" ["descrizioneValoreDatoTecnicoMassimo"]=> string(4) "5900" ["@attributes"]=> array(1) { ["asse"]=> string(2) "12" } }

  4. #4
    Ti invito a leggere meglio il codice proposto e la documentazione ufficiale:


    https://php.net/foreach

    In order to be able to directly modify array elements within the loop precede $value with &. In that case the value will be assigned by reference.

  5. #5
    si ho letto il link.
    però a me c'è qualcosa che non quadra.

    ho provato ad applicare il tuo esempio al mio codice:
    codice:
    $json = file_get_contents('test.json');
    $data = json_decode($json, true);
    
    
    foreach ($data['richiestaAcquisizioneSchedaControlloFamiglia']['richiestaAcquisizioneSchedaControlloFamigliaM2M3']['dimensioniPrincipali']['interasse'] as $v) {
      foreach ($v as &$valore) {
        var_dump($valore);
        echo "<br>";
        var_dump(is_array($valore));
        echo "<br>";
        var_dump([$valore]);
      }
    }
    mi esce 12, che è uno dei valori che ci sta dentro al campo interasse.
    ma non capisco perchè sinceramente.
    il controllo su is_array mi da false, giustamente, ma poi non mi riporta interasse dentro ad un array.
    mi ci riporta solo il 12.

    questo l'output:
    codice:
    string(2) "12"
    bool(false)
    array(1) { [0]=> string(2) "12" }

  6. #6

  7. #7
    scusa, me l'ero persa l & sul primo foreach.

    ma cmq non mi è cambiato nulla.
    codice:
    codice:
    $json = file_get_contents('test.json');
    $data = json_decode($json, true);
    
    
    foreach ($data['richiestaAcquisizioneSchedaControlloFamiglia']['richiestaAcquisizioneSchedaControlloFamigliaM2M3']['dimensioniPrincipali']['interasse'] as &$v) {
      foreach ($v as &$valore) {
        var_dump($valore);
        echo "<br>";
        var_dump(is_array($valore));
        echo "<br>";
        var_dump([$valore]);
      }
    }
    pagina:
    codice:
    string(2) "12"
    bool(false)
    array(1) { [0]=> string(2) "12" }

  8. #8
    Potresti indicarmi dove cambi $valore da stringa ad array come viene fatto nel codice proposto?

  9. #9
    ciao!

    non ho ben capito la domanda, ma ti riporto l'ultimo tentativo fatto (che in pratica riprende dal tuo):
    codice:
    <?php
    
    
    $json = file_get_contents('test.json');
    $data = json_decode($json, true);
    
    
    foreach ($data['richiestaAcquisizioneSchedaControlloFamiglia']['richiestaAcquisizioneSchedaControlloFamigliaM2M3']['dimensioniPrincipali']['interasse'] as &$v) {
      foreach ($v as &$valore) {
        $valore = is_array($valore) ? $valore : [$valore];
      }
    }
    
    
    print(json_encode($data, JSON_PRETTY_PRINT));
    in realtà funziona, ma non mi mette in array tutto interasse, ma solo asse (te l'ho segnalato).
    ti metto il JSON risultante:
    codice:
    {
     "richiestaAcquisizioneSchedaControlloFamiglia": {
      "intestazioneFamiglia": {
       "omologazioneEuropea": "e8*2018/858*00063*04",
       "dataRilascioOmologazioneEuropea": "2024-02-08",
       "costruttoreFamiglia": "6554",
       "marchio": "23B",
       "famiglia": "URBINO 12",
       "categoriaInternazionale": "M3"
      },
      "richiestaAcquisizioneSchedaControlloFamigliaM2M3": {
       "caratteristicheGeneraliDiCostruzione": {
        "numeroAssi": "2"
       },
       "dimensioniPrincipali": {
        "interasse": {
         "descrizioneValoreDatoTecnicoMinimo": "5900",
         "descrizioneValoreDatoTecnicoMassimo": "5900",
         "@attributes": {
          "asse": [ --> QUI
           "12"
          ]
         }
        },
        "lunghezza": {
         "descrizioneValoreDatoTecnicoMinimo": "12000",
         "descrizioneValoreDatoTecnicoMassimo": "12000"
        }
       },
       "masse": {
        "massaDelVeicoloInOrdineDiMarciaTara": {
         "descrizioneValoreDatoTecnicoMinimo": "9900",
         "descrizioneValoreDatoTecnicoMassimo": "14950"
        },
        "massaMassimaTecnicamenteAmmissibileAPienoCarico": {
         "descrizioneValoreDatoTecnicoMinimo": "19245",
         "descrizioneValoreDatoTecnicoMassimo": "19700"
        },
        "massaMassimaTecnicamenteAmmissibilePerImmatricolazione": {
         "descrizioneValoreDatoTecnicoMinimo": "19245",
         "descrizioneValoreDatoTecnicoMassimo": "19700"
        },
        "massaTrainabileInCasoDiRimorchioATimone": {
         "descrizioneValoreDatoTecnicoMinimo": "0",
         "descrizioneValoreDatoTecnicoMassimo": "0"
        }
       },
       "massePerAsse": [
        {
         "massaMassimaTecnicamenteAmmissibileSuAsse": {
          "descrizioneValoreDatoTecnicoMinimo": "7245",
          "descrizioneValoreDatoTecnicoMassimo": "7700"
         },
         "massaMassimaAmmissibilePerImmatricolazioneAsse": {
          "descrizioneValoreDatoTecnicoMinimo": "7245",
          "descrizioneValoreDatoTecnicoMassimo": "7700"
         },
         "@attributes": {
          "asse": "1"
         }
        },
        {
         "massaMassimaTecnicamenteAmmissibileSuAsse": {
          "descrizioneValoreDatoTecnicoMinimo": "12000",
          "descrizioneValoreDatoTecnicoMassimo": "12000"
         },
         "massaMassimaAmmissibilePerImmatricolazioneAsse": {
          "descrizioneValoreDatoTecnicoMinimo": "12000",
          "descrizioneValoreDatoTecnicoMassimo": "12000"
         },
         "@attributes": {
          "asse": "2"
         }
        }
       ],
       "apparatoMotore": {
        "codiceMotore": [
         "AVE 130",
         "CeTrax CX 220 110 B",
         "L9NE6E320"
        ],
        "cilindrata": [
         "0",
         "8880",
         "0"
        ],
        "carburante": [
         "ELE",
         "ME"
        ]
       },
       "potenzaMotoreTermico": {
        "potenzaMassimaNettaMotoreTermico": "235",
        "regimeDiPotenzaMassima": "2000",
        "@attributes": {
         "combustibile": "ME"
        }
       },
       "assiESospensioni": {
        "carreggiata": [
         {
          "descrizioneValoreDatoTecnicoMinimo": "2085",
          "descrizioneValoreDatoTecnicoMassimo": "2178",
          "@attributes": {
           "asse": "1"
          }
         },
         {
          "descrizioneValoreDatoTecnicoMinimo": "1826",
          "descrizioneValoreDatoTecnicoMassimo": "1888",
          "@attributes": {
           "asse": "2"
          }
         }
        ]
       },
       "pneumatico": [
        {
         "larghezzaPneumatico": "275",
         "coefficienteDiRibassamento": "70",
         "raggioRuota": "22,5",
         "indiceDiCarico": "148",
         "indiceDiVelocita": "J",
         "@attributes": {
          "ruota": "1",
          "asse": "1"
         }
        },
        {
         "larghezzaPneumatico": "275",
         "coefficienteDiRibassamento": "70",
         "raggioRuota": "22,5",
         "indiceDiCarico": "145",
         "indiceDiVelocita": "J",
         "@attributes": {
          "ruota": "1",
          "asse": "2"
         }
        }
       ],
       "prestazioniAmbientali": {
        "emissioniGasScaricoNumeroAttoNormativo": [
         "ZZ",
         "C27"
        ]
       },
       "prestazioniAmbientaliMotoreElettrico": {
        "potenzaMassima30MinutiMotoreElettrico": "225"
       },
       "proceduraDiProva4": {
        "particolatoProceduraDiProvaWhtcMgKw": {
         "descrizioneValoreDatoTecnicoMinimo": "0.1",
         "descrizioneValoreDatoTecnicoMassimo": "0.1"
        },
        "noxProceduraDiProvaWhtcMgKw": {
         "descrizioneValoreDatoTecnicoMinimo": "76.73",
         "descrizioneValoreDatoTecnicoMassimo": "76.73"
        },
        "nh3ProceduraDiProvaWhtcMgKw": {
         "descrizioneValoreDatoTecnicoMinimo": "0.73",
         "descrizioneValoreDatoTecnicoMassimo": "0.73"
        },
        "@attributes": {
         "combustibile": "ME"
        }
       }
      }
     }
    }

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 © 2024 vBulletin Solutions, Inc. All rights reserved.