동적 키를 사용하여 PHP 개체를 루프하는 방법
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 loop을 만들어야 할 것 같습니다.
이에 대한 예를 들어주시면 감사하겠습니다.
다차원 배열에서 반복하려면 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
이렇게 많은 사람들이 JSON을 제대로 읽지 않고 답을 올리고 있다니 믿을 수 없다.
반복하면$json_a
혼자서는 사물의 대상을 가지고 있다.네가 합격해도true
두 번째 매개변수로 2차원 배열이 있습니다.첫 번째 차원을 반복하고 있다면 두 번째 차원을 그렇게 반복할 수 없습니다.그럼 이건 잘못된 거네요.
foreach ($json_a as $k => $v) {
echo $k, ' : ', $v;
}
각 사용자의 상태를 반영하려면 다음을 수행합니다.
<?php
$string = file_get_contents("/home/michael/test.json");
if ($string === false) {
// deal with error...
}
$json_a = json_decode($string, true);
if ($json_a === null) {
// deal with error...
}
foreach ($json_a as $person_name => $person_a) {
echo $person_a['status'];
}
?>
가장 우아한 솔루션:
$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;
해라
<?php
$string = file_get_contents("/home/michael/test.json");
$json_a = json_decode($string,true);
foreach ($json_a as $key => $value){
echo $key . ':' . $value;
}
?>
아무도 당신의 시작 태그가 틀렸다고 지적하지 않았다는 것은 전혀 이해할 수 없습니다.{}을(를) 사용하여 개체를 생성하는 동안 []을(를) 사용하여 어레이를 생성할 수 있습니다.
[ // <-- 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은 객체가 아닌 배열로 해석됩니다.이 어레이를 사용하면 루프 등 원하는 모든 작업을 수행할 수 있습니다.
시험해 보다
$json_data = '{
"John": {
"status":"Wait"
},
"Jennifer": {
"status":"Active"
},
"James": {
"status":"Active",
"age":56,
"count":10,
"progress":0.0029857,
"bad":0
}
}';
$decode_data = json_decode($json_data);
foreach($decode_data as $key=>$value){
print_r($value);
}
시험:
$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 />';
}
}
}
보다 표준적인 답변:
$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
를 사용하여 JSON을 루프합니다.foreach
키와 값의 쌍으로 루프합니다.타입 체크를 실행하여 루프를 더 실행할 필요가 있는지 여부를 판단합니다.
foreach($json_a as $key => $value) {
echo $key;
if (gettype($value) == "object") {
foreach ($value as $key => $value) {
# and so on
}
}
}
<?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'];
?>
시험해 보세요:
foreach ($json_a as $key => $value)
{
echo $key, ' : ';
foreach($value as $v)
{
echo $v." ";
}
}
json 문자열을 디코딩하면 오브젝트가 생성됩니다.배열이 아닙니다.따라서 얻을 수 있는 구조를 확인하는 가장 좋은 방법은 디코드의 var_dump를 만드는 것입니다.(주로 복잡한 경우 이 var_module은 구조를 이해하는 데 도움이 됩니다).
<?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";
}
?>
$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>";
}
}
모든 json 값을 에코하는 가장 빠른 방법은 루프 인 루프를 사용하는 것입니다.첫 번째 루프는 모든 객체를 가져오고 두 번째 루프는 값을 가져옵니다.
foreach($data as $object) {
foreach($object as $value) {
echo $value;
}
}
이렇게 주셔야 합니다.
echo $json_a['John']['status'];
echo "<>"
echo $json_a['Jennifer']['status'];
br inside <>
결과는 다음과 같습니다.
wait
active
i i i i에서 을 배열로 변환하기 위해 아래 코드를 .PHP
할 경우 JSON이 유효합니다json_decode()
는 정상적으로 JSON이 됩니다.NULL
,
<?php
function jsonDecode1($json){
$arr = json_decode($json, true);
return $arr;
}
// In case of malformed JSON, it will return NULL
var_dump( jsonDecode1($json) );
?>
부정한 JSON의 경우 배열만 예상하면 이 함수를 사용할 수 있습니다.
<?php
function jsonDecode2($json){
$arr = (array) json_decode($json, true);
return $arr;
}
// In case of malformed JSON, it will return an empty array()
var_dump( jsonDecode2($json) );
?>
부정한 JSON의 경우 코드 실행을 중지하고 싶다면 이 함수를 사용할 수 있습니다.
<?php
function jsonDecode3($json){
$arr = (array) json_decode($json, true);
if(empty(json_last_error())){
return $arr;
}
else{
throw new ErrorException( json_last_error_msg() );
}
}
// In case of malformed JSON, Fatal error will be generated
var_dump( jsonDecode3($json) );
?>
언급URL : https://stackoverflow.com/questions/4343596/how-to-loop-through-php-object-with-dynamic-keys
'programing' 카테고리의 다른 글
도커 Mongo 데이터 볼륨 설정 방법 (0) | 2023.03.08 |
---|---|
워드프레스워드프레스img 태그 없이img 태그 없이 (0) | 2023.03.08 |
HTML5 유효성 검사 시 빈 머리글 경고 (0) | 2023.03.08 |
특정 UpdatePanel이 로드된 후 클라이언트 측 javascript 함수를 호출하는 방법 (0) | 2023.03.08 |
스프링 구성 XML 스키마: 버전 유무 (0) | 2023.03.08 |