복붙노트

PHP로 JSON 파일을 어떻게 파싱 할 수 있습니까?

PHP

PHP로 JSON 파일을 어떻게 파싱 할 수 있습니까?

PHP를 사용하여 JSON 파일을 구문 분석하려고했습니다. 그러나 나는 지금 붙어있다.

다음은 JSON 파일의 내용입니다.

{
    "John": {
        "status":"Wait"
    },
    "Jennifer": {
        "status":"Active"
    },
    "James": {
        "status":"Active",
        "age":56,
        "count":10,
        "progress":0.0029857,
        "bad":0
    }
}

그리고 이것은 제가 지금까지 시도한 것입니다 :

<?php

$string = file_get_contents("/home/michael/test.json");
$json_a = json_decode($string, true);

echo $json_a['John'][status];
echo $json_a['Jennifer'][status];

그러나 이름 (예 : 'John', 'Jennifer')과 사용 가능한 모든 키와 값 (예 : 'age', 'count')을 모르기 때문에 foreach 루프를 만들어야한다고 생각합니다.

이것에 대한 예를 들어 주시면 감사하겠습니다.

해결법

  1. ==============================

    1.

    다차원 배열을 반복하려면 RecursiveArrayIterator

    $jsonIterator = new RecursiveIteratorIterator(
        new RecursiveArrayIterator(json_decode($json, TRUE)),
        RecursiveIteratorIterator::SELF_FIRST);
    
    foreach ($jsonIterator as $key => $val) {
        if(is_array($val)) {
            echo "$key:\n";
        } else {
            echo "$key => $val\n";
        }
    }
    

    산출:

    John:
    status => Wait
    Jennifer:
    status => Active
    James:
    status => Active
    age => 56
    count => 10
    progress => 0.0029857
    bad => 0
    

    코드 패드에서 실행

  2. ==============================

    2.

    많은 사람들이 JSON을 제대로 읽지 않고 답변을 게시하고 있다고 믿을 수 없습니다.

    $ json_a 만 반복하면 foreach 객체의 객체를 가질 수 있습니다. 두 번째 매개 변수로 true를 전달하더라도 2 차원 배열을 사용합니다. 첫 번째 차원을 반복 할 경우 두 번째 차원을 그대로 반복 할 수 없습니다. 그래서 이것은 잘못되었습니다.

    foreach ($json_a as $k => $v) {
       echo $k, ' : ', $v;
    }
    

    각 사람의 상태를 표시하려면 다음을 시도하십시오.

    <?php
    
    $string = file_get_contents("/home/michael/test.json");
    $json_a = json_decode($string, true);
    
    foreach ($json_a as $person_name => $person_a) {
        echo $person_a['status'];
    }
    
    ?>
    
  3. ==============================

    3.

    가장 우아한 솔루션 :

    $shipments = json_decode(file_get_contents("shipments.js"), true);
    print_r($shipments);
    

    json 파일은 BOM없이 UTF-8로 인코딩되어야한다는 것을 기억하십시오. 파일에 BOM이 있으면 json_decode는 NULL을 반환합니다.

    대안 :

    $shipments = json_encode(json_decode(file_get_contents("shipments.js"), true));
    echo $shipments;
    
  4. ==============================

    4.

    시험

    <?php
    $string = file_get_contents("/home/michael/test.json");
    $json_a=json_decode($string,true);
    
    foreach ($json_a as $key => $value){
      echo  $key . ':' . $value;
    }
    ?>
    
  5. ==============================

    5.

    어느 누구도 당신의 시작 "태그"가 잘못되었다는 것을 지적하지 못했습니다. {}를 사용하여 배열을 만들 수있는 동안 {}을 사용하여 객체를 만듭니다.

    [ // <-- Note that I changed this
        {
            "name" : "john", // And moved the name here.
            "status":"Wait"
        },
        {
            "name" : "Jennifer",
            "status":"Active"
        },
        {
            "name" : "James",
            "status":"Active",
            "age":56,
            "count":10,
            "progress":0.0029857,
            "bad":0
        }
    ] // <-- And this.
    

    이 변경으로 json은 객체 대신 배열로 파싱됩니다. 그리고 배열을 사용하면 루프와 같은 원하는대로 할 수 있습니다.

  6. ==============================

    6.

    이 시도

  7. ==============================

    7.

    시험:

    $string = file_get_contents("/home/michael/test.json");
    $json = json_decode($string, true);
    
    foreach ($json as $key => $value) {
        if (!is_array($value)) {
            echo $key . '=>' . $value . '<br />';
        } else {
            foreach ($value as $key => $val) {
                echo $key . '=>' . $val . '<br />';
            }
        }
    }
    
  8. ==============================

    8.

    foreach 루프를 사용하여 JSON을 키 - 값 쌍으로 반복합니다. 더 많은 루핑이 필요한지 판별하려면 유형 검사를 수행하십시오.

    foreach($json_a as $key => $value) {
        echo $key;
        if (gettype($value) == "object") {
            foreach ($value as $key => $value) {
              # and so on
            }
        }
    }
    
  9. ==============================

    9.

    더 일반적인 답 :

    $jsondata = file_get_contents(PATH_TO_JSON_FILE."/jsonfile.json");
    
    $array = json_decode($jsondata,true);
    
    foreach($array as $k=>$val):
        echo '<b>Name: '.$k.'</b></br>';
        $keys = array_keys($val);
        foreach($keys as $key):
            echo '&nbsp;'.ucfirst($key).' = '.$val[$key].'</br>';
        endforeach;
    endforeach;
    

    출력은 다음과 같습니다.

    Name: John
     Status = Wait
    Name: Jennifer
     Status = Active
    Name: James
     Status = Active
     Age = 56
     Count = 10
     Progress = 0.0029857
     Bad = 0
    
  10. ==============================

    10.

    시도 해봐:

    foreach ($json_a as $key => $value)
     {
       echo $key, ' : ';
       foreach($value as $v)
       {
           echo $v."  ";
       }
    }
    
  11. ==============================

    11.

    JSON 문자열을 디코딩하면 객체가 생깁니다. 배열이 아닙니다. 그래서 당신이 얻고있는 구조를 보는 가장 좋은 방법은 디코딩의 var_dump를 만드는 것입니다. (이 var_dump는 주로 복잡한 경우에 구조를 이해하는 데 도움이 될 수 있습니다).

    <?php
         $json = file_get_contents('/home/michael/test.json');
         $json_a = json_decode($json);
         var_dump($json_a); // just to see the structure. It will help you for future cases
         echo "\n";
         foreach($json_a as $row){
             echo $row->status;
             echo "\n";
         }
    ?>
    
  12. ==============================

    12.

    $json_a = json_decode($string, TRUE);
    $json_o = json_decode($string);
    
    
    
    foreach($json_a as $person => $value)
    {
        foreach($value as $key => $personal)
        {
            echo $person. " with ".$key . " is ".$personal;
            echo "<br>";
        }
    
    }
    
  13. ==============================

    13.

    당신은 이렇게해야합니다 :

    echo  $json_a['John']['status']; 
    
    echo "<>"
    
    echo  $json_a['Jennifer']['status'];
    
    br inside <>
    

    결과는 다음과 같습니다.

    wait
    active
    
  14. ==============================

    14.

    모든 json 값을 반향시키는 가장 빠른 방법은 loop in loop를 사용하는 것입니다. 첫 번째 루프는 모든 객체를 얻고 두 번째 루프는 값을 얻습니다.

    foreach($data as $object) {
    
            foreach($object as $value) {
    
                echo $value;
    
            }
    
        }
    
  15. ==============================

    15.

    <?php
    $json = '{
        "response": {
            "data": [{"identifier": "Be Soft Drinker, Inc.", "entityName": "BusinessPartner"}],
            "status": 0,
            "totalRows": 83,
            "startRow": 0,
            "endRow": 82
        }
    }';
    $json = json_decode($json, true);
    //echo '<pre>'; print_r($json); exit;
    echo $json['response']['data'][0]['identifier'];
    $json['response']['data'][0]['entityName']
    echo $json['response']['status']; 
    echo $json['response']['totalRows']; 
    echo $json['response']['startRow']; 
    echo $json['response']['endRow']; 
    
    ?>
    
  16. from https://stackoverflow.com/questions/4343596/how-can-i-parse-a-json-file-with-php by cc-by-sa and MIT lisence