본문 바로가기
Coding/PHP

[PHP] 복잡한 JSON 파일 PHP로 파싱

by jamong1014 2023. 2. 25.
반응형

EX) 간단한 구조의 JSON 불러오기

 

test.json

{
    "name": "John Doe",
    "age": 30,
    "hobbies": ["reading", "swimming", "traveling"],
    "address": {
        "street": "123 Main St",
        "city": "Anytown",
        "state": "CA",
        "zip": "12345"
    }
}

 

load.php

<?php

$json = file_get_contents('test.json'); //test.json 파일 읽어옴
$data = json_decode($json, true); // JSON을 PHP 배열로 변환

$city = $data['address']['city']; // "Anytown" 반환

echo "" .$city; // 출력

?>

EX) 복잡한 구조의 JSON 불러오기

 

test.json

{
   "destination_addresses" : [ "대한민국 광주광역시" ],
   "origin_addresses" : [ "대한민국 인천광역시" ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "327 km",
                  "value" : 326827
               },
               "duration" : {
                  "text" : "4시간 5분",
                  "value" : 14680
               },
               "status" : "OK"
            }
         ]
      }
   ],
   "status" : "OK"
}

 

load.php

<?php

$json = file_get_contents('test.json'); //test.json 파일 읽어옴
$data = json_decode($json, true); // JSON을 PHP 배열로 변환

$distance_text = $data['rows'][0]['elements'][0]['distance']['text']; // 각 요소들의 인덱스를 이용하여 distance의 text부분을 불러옴

echo $distance_text; // 출력 결과: 327 km

?>

EX) 복잡한 구조의 JSON 파일 배열을 재귀적으로 탐색

 

test.json

{
    "name": "John",
    "age": 30,
    "pets": [
        {
            "name": "Fluffy",
            "type": "cat",
            "age": 5
        },
        {
            "name": "Fido",
            "type": "dog",
            "age": 3
        }
    ]
}

 

load.php

<?php

function search($array, $key, $value)
{
    $results = array();

    if (is_array($array)) {
        if (isset($array[$key]) && $array[$key] == $value) {
            $results[] = $array;
        }

        foreach ($array as $subarray) {
            $results = array_merge($results, search($subarray, $key, $value));
        }
    }

    return $results;
}

$json = file_get_contents('test.json');
$data = json_decode($json, true);

$results = search($data['pets'], 'name', 'Fluffy');

foreach ($results as $result) {
    echo "Found pet: " . $result['name'] . " (" . $result['type'] . ")\n";
}

?>

$array에서 $key와 $value가 일치하는 원소들을 모두 찾아서 배열로 반환

반응형

댓글