PHP로 JSON 파일을 어떻게 파싱 할 수 있습니까?
PHPPHP로 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.
다차원 배열을 반복하려면 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.
많은 사람들이 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.
가장 우아한 솔루션 :
$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.
시험
<?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.
어느 누구도 당신의 시작 "태그"가 잘못되었다는 것을 지적하지 못했습니다. {}를 사용하여 배열을 만들 수있는 동안 {}을 사용하여 객체를 만듭니다.
[ // <-- 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.
이 시도
-
==============================
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.
foreach 루프를 사용하여 JSON을 키 - 값 쌍으로 반복합니다. 더 많은 루핑이 필요한지 판별하려면 유형 검사를 수행하십시오.
foreach($json_a as $key => $value) { echo $key; if (gettype($value) == "object") { foreach ($value as $key => $value) { # and so on } } }
-
==============================
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 ' '.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.
시도 해봐:
foreach ($json_a as $key => $value) { echo $key, ' : '; foreach($value as $v) { echo $v." "; } }
-
==============================
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.
$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.
당신은 이렇게해야합니다 :
echo $json_a['John']['status']; echo "<>" echo $json_a['Jennifer']['status']; br inside <>
결과는 다음과 같습니다.
wait active
-
==============================
14.
모든 json 값을 반향시키는 가장 빠른 방법은 loop in loop를 사용하는 것입니다. 첫 번째 루프는 모든 객체를 얻고 두 번째 루프는 값을 얻습니다.
foreach($data as $object) { foreach($object as $value) { echo $value; } }
-
==============================
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']; ?>
from https://stackoverflow.com/questions/4343596/how-can-i-parse-a-json-file-with-php by cc-by-sa and MIT lisence
'PHP' 카테고리의 다른 글
PHP에서 ereg 표현식을 preg로 변환하려면 어떻게해야합니까? (0) | 2018.09.01 |
---|---|
MVC에서 모델을 어떻게 구성해야합니까? (0) | 2018.09.01 |
30 분 후에 어떻게 PHP 세션을 만료 시키나요? (0) | 2018.09.01 |
PHP - 스트림을 열지 못했습니다 : 해당 파일이나 디렉토리가 없습니다 (0) | 2018.09.01 |
값으로 다차원 배열 정렬 (0) | 2018.09.01 |