복붙노트

PHP로 JSON에서 데이터를 추출하려면 어떻게해야합니까?

PHP

PHP로 JSON에서 데이터를 추출하려면 어떻게해야합니까?

나는 JSON있다 :

{
    "type": "donut",
    "name": "Cake",
    "toppings": [
        { "id": "5002", "type": "Glazed" },
        { "id": "5006", "type": "Chocolate with Sprinkles" },
        { "id": "5004", "type": "Maple" }
    ]
}

어떻게 이것을 PHP에서 디코딩하고 결과 데이터에 액세스합니까?

해결법

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

    1.

    먼저 문자열이 있습니다. JSON은 배열, 객체 또는 데이터 구조가 아닙니다. JSON은 텍스트 기반 직렬화 형식이므로 멋진 문자열이지만 여전히 문자열입니다. json_decode ()를 사용하여 PHP로 디코딩하십시오.

     $data = json_decode($json);
    

    거기에서 당신은 찾을 수 있습니다 :

    JSON에서 인코딩 할 수있는 것들입니다. 또는 더 정확하게는 JSON에서 인코딩 할 수있는 PHP의 버전입니다.

    그들에게는 특별한 것이 없습니다. "JSON 객체"또는 "JSON 배열"이 아닙니다. JSON을 해독했습니다. 이제는 기본적인 PHP 유형을 사용하게되었습니다.

    객체는 기본 클래스 인 stdClass의 인스턴스가 될 것입니다.이 클래스는 여기서는 중요하지 않습니다.

    다른 객체의 public 비 정적 속성과 동일한 방식으로 이러한 객체 중 하나의 속성에 액세스합니다 (예 : $ object-> 속성.

    $json = '
    {
        "type": "donut",
        "name": "Cake"
    }';
    
    $yummy = json_decode($json);
    
    echo $yummy->type; //donut
    

    다른 배열과 동일한 방식으로 이러한 배열 중 하나의 요소에 액세스합니다 (예 : $ 배열 [0].

    $json = '
    [
        "Glazed",
        "Chocolate with Sprinkles",
        "Maple"
    ]';
    
    $toppings = json_decode($json);
    
    echo $toppings[1]; //Chocolate with Sprinkles
    

    foreach로 그것을 반복하십시오.

    foreach ($toppings as $topping) {
        echo $topping, "\n";
    }
    

    또는 bazillion 내장 배열 함수를 사용하여 엉망으로 만들 수 있습니다.

    객체의 속성과 배열의 요소는 더 많은 객체 및 / 또는 배열 일 수 있습니다. 평소처럼 속성 및 멤버에 계속 액세스 할 수 있습니다. $ object-> array [0] -> 등등.

    $json = '
    {
        "type": "donut",
        "name": "Cake",
        "toppings": [
            { "id": "5002", "type": "Glazed" },
            { "id": "5006", "type": "Chocolate with Sprinkles" },
            { "id": "5004", "type": "Maple" }
        ]
    }';
    
    $yummy = json_decode($json);
    
    echo $yummy->toppings[2]->id; //5004
    

    이 작업을 수행 할 때 객체 대신 키와 관련된 문자열을 가진 연관 배열을 얻을 수 있습니다. 다시 평소처럼 요소에 액세스합니다. $ array [ 'key'].

    $json = '
    {
        "type": "donut",
        "name": "Cake",
        "toppings": [
            { "id": "5002", "type": "Glazed" },
            { "id": "5006", "type": "Chocolate with Sprinkles" },
            { "id": "5004", "type": "Maple" }
        ]
    }';
    
    $yummy = json_decode($json, true);
    
    echo $yummy['toppings'][2]['type']; //Maple
    

    JSON을 얻는 방법에 대한 설명서를 읽으십시오.

    중괄호 {}가 객체를 기대하는 곳에있는 JSON을보십시오. 대괄호 []가 배열을 기대합니다.

    print_r ()을 사용하여 디코딩 된 데이터 조회 :

    $json = '
    {
        "type": "donut",
        "name": "Cake",
        "toppings": [
            { "id": "5002", "type": "Glazed" },
            { "id": "5006", "type": "Chocolate with Sprinkles" },
            { "id": "5004", "type": "Maple" }
        ]
    }';
    
    $yummy = json_decode($json);
    
    print_r($yummy);
    

    출력을 확인하십시오.

    stdClass Object
    (
        [type] => donut
        [name] => Cake
        [toppings] => Array
            (
                [0] => stdClass Object
                    (
                        [id] => 5002
                        [type] => Glazed
                    )
    
                [1] => stdClass Object
                    (
                        [id] => 5006
                        [type] => Chocolate with Sprinkles
                    )
    
                [2] => stdClass Object
                    (
                        [id] => 5004
                        [type] => Maple
                    )
    
            )
    
    )
    

    개체가있는 곳, 배열이있는 곳, 멤버의 이름과 값을 알려줍니다.

    잃어 버리기 전에 그것에까지 도달 할 수 있다면 - 멀리 가서 print_r ()을 사용하십시오 :

    print_r($yummy->toppings[0]);
    
    stdClass Object
    (
        [id] => 5002
        [type] => Glazed
    )
    

    머리를 감싸기 쉽도록 조각으로 문제를 해결하십시오.

    이것은 다음 중 하나 때문입니다.

    최대 깊이를 변경해야하는 경우 잘못된 문제를 해결할 수 있습니다. 깊게 중첩 된 데이터를 가져 오는 이유 (예 : 쿼리하는 서비스에서 JSON을 생성하는 서비스에 버그가 있음)를 확인하고 오류가 발생하지 않도록하십시오.

    때로는 리터럴 식별자에서 사용할 수없는 하이픈 또는 기호 @와 같은 것을 포함하는 객체 속성 이름을 갖게됩니다. 대신 중괄호 안에 문자열 리터럴을 사용하여이를 처리 할 수 ​​있습니다.

    $json = '{"@attributes":{"answer":42}}';
    $thing = json_decode($json);
    
    echo $thing->{'@attributes'}->answer; //42
    

    정수로 속성을 가지고 있다면 : 정수와 같은 이름으로 객체 속성에 접근하는 방법은? 참조로.

    우스꽝 스럽지만 JSON이 JSON 내에 문자열로 인코딩되어있다. 디코드하고, 평소와 같이 문자열에 액세스하고, 디코딩 한 다음 궁극적으로 필요한 부분에 도달하십시오.

    $json = '
    {
        "type": "donut",
        "name": "Cake",
        "toppings": "[{ \"type\": \"Glazed\" }, { \"type\": \"Maple\" }]"
    }';
    
    $yummy = json_decode($json);
    $toppings = json_decode($yummy->toppings);
    
    echo $toppings[0]->type; //Glazed
    

    JSON이 너무 커서 json_decode ()가 즉시 처리하지 못하면 일이 까다로워지기 시작합니다. 만나다:

    참조 : 참고 자료 : PHP에서 배열과 데이터를 정렬하는 모든 기본적인 방법.

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

    2.

    json_decode ()를 사용하여 json 문자열을 PHP 객체 / 배열로 변환 할 수 있습니다.

    예 :

    입력:

    $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
    
    var_dump(json_decode($json));
    var_dump(json_decode($json, true));
    

    산출:

    object(stdClass)#1 (5) {
        ["a"] => int(1)
        ["b"] => int(2)
        ["c"] => int(3)
        ["d"] => int(4)
        ["e"] => int(5)
    }
    
    array(5) {
        ["a"] => int(1)
        ["b"] => int(2)
        ["c"] => int(3)
        ["d"] => int(4)
        ["e"] => int(5)
    }
    

    몇 가지 기억해야 할 점 :

  3. from https://stackoverflow.com/questions/29308898/how-do-i-extract-data-from-json-with-php by cc-by-sa and MIT lisence