JSON_DECODE 함수의 기본 형식은 다음과 같습니다.
$data = json_decode($jsonString, true);
첫 번째 매개 변수는 JSON 문자열입니다.
두 번째 매개 변수가 참 이면 결과는 연관 배열로 구문 분석됩니다. 생략되거나 false가 있으면 객체가 반환됩니다.
다음과 같은 다차원 JSON 데이터가 있다고 가정합니다.
{
"user": {
"name": "Alice",
"contacts": [
{"type": "email", "value": "[email protected]"},
{"type": "phone", "value": "123456789"}
]
}
}
구문 분석 코드 :
$json = '{"user":{"name":"Alice","contacts":[{"type":"email","value":"[email protected]"},{"type":"phone","value":"123456789"}]}}';
$data = json_decode($json, true);
이 시점에서 $ 데이터 는 다차원 연관 배열입니다. 많은 개발자들이 직면 한 문제는 다음과 같습니다.
JSON 파싱이 성공했는지 여부를 올바르게 판단하지 않았습니다 . <br> 들어오는 JSON의 형식이 잘못된 경우 JSON_DECODE는 NULL을 반환하고 오류를보고하지 않습니다. JSON_LAST_ERROR ()를 사용하여 판단해야합니다.
난독 화 된 물체 및 배열 액세스 방법 <br> JSON_DECODE 의 두 번째 매개 변수가 False (기본값) 인 경우 객체가 반환되고 -> 액세스 속성이 필요합니다. TRUED 인 경우 배열이 반환되고 [] 액세스가 필요합니다.
다차원 배열의 계층 적 접근은 고려되지 않습니다 <br> $ data [ 'user']-> 이름 다차원 배열에 액세스 할 때 $ data [ 'user']가 객체가 아닌 배열이기 때문에 오류가 발생합니다.
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo "JSON 구문 분석 오류:" . json_last_error_msg();
exit;
}
이 단계는 후속 처리 오류를 효과적으로 피할 수 있습니다.
// 오류 데모(두 번째 매개 변수는입니다true,결과는 배열입니다,____은 작동하지 않습니다 ->)
echo $data['user']->name; // 오류를보고합니다
// 올바른 데모
echo $data['user']['name']; // 산출 Alice
연락처를 반복하고 싶다고 가정합니다.
foreach ($data['user']['contacts'] as $contact) {
echo $contact['type'] . ": " . $contact['value'] . "\n";
}
복잡한 구조 및 고정되지 않은 층을 갖는 JSON의 경우 재귀 구문 분석이 필요할 수 있습니다. 예:
function printJson($data, $indent = 0) {
if (is_array($data)) {
foreach ($data as $key => $value) {
echo str_repeat(" ", $indent) . $key . ": ";
if (is_array($value)) {
echo "\n";
printJson($value, $indent + 1);
} else {
echo $value . "\n";
}
}
}
}
printJson($data);
이 코드는 다차원 배열의 모든 레벨과 주요 값을 명확하게 인쇄합니다.
JSON_DECODE를 사용하여 다차원 JSON을 구문 분석 할 때 구문 분석이 성공했는지 확인하고 JSON_LAST_ERROR ()를 사용하십시오.
전달 된 두 번째 매개 변수를 명확하게 정의하고 객체 또는 배열을 반환할지 여부를 결정하면 액세스 방법이 일관성이 있어야합니다.
다차원 배열 또는 객체의 경우 액세스 레벨을 정확하게 접근하고 혼합 -> 및 []를 피하십시오.
재귀 함수를 사용하여 필요할 때 복잡한 다차원 구조를 처리하십시오.
위의 점을 마스터하는 한 다차원 JSON 데이터를 구문 분석 할 때 JSON_DECODE 의 공통 트랩을 효과적으로 피하고보다 강력하고 유지 관리 가능한 PHP 코드를 작성할 수 있습니다.