소개
먼저 문자열이 있습니다. JSON은 배열, 객체 또는 데이터 구조가 아닙니다. JSON 은 텍스트 기반 직렬화 형식이므로 멋진 문자열이지만 여전히 문자열입니다. 을 사용하여 PHP로 해독하십시오 json_decode()
.
$data = json_decode($json);
거기에서 찾을 수 있습니다 :
이것들은 JSON으로 인코딩 할 수있는 것들입니다. 보다 정확하게는 JSON으로 인코딩 할 수있는 PHP 버전입니다.
그들에게는 특별한 것이 없습니다. "JSON 객체"또는 "JSON 배열"이 아닙니다. JSON을 해독했습니다. 이제 일상적인 기본 PHP 유형이 있습니다 .
객체는 내장 클래스 인 stdClass의 인스턴스가 될 것입니다.이 클래스는 여기서 중요하지 않은 일반적인 것 입니다.
객체 속성에 액세스
예를 들어, 다른 객체의 공개 비 정적 속성과 동일한 방식으로 이러한 객체 중 하나의 속성 에 액세스합니다 $object->property
.
$json = '
{
"type": "donut",
"name": "Cake"
}';
$yummy = json_decode($json);
echo $yummy->type; //donut
배열 요소에 액세스
예를 들어, 다른 배열과 같은 방식으로 이러한 배열 중 하나의 요소에 액세스합니다 $array[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]->etc
. 평소처럼 예를 들어 속성과 멤버에 계속 액세스 할 수 있습니다 .
$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 객체 를 연관 PHP 배열로 디코딩 할 때 다음 과 foreach (array_expression as $key => $value)
같은 구문을 사용하여 키와 값을 반복 할 수 있습니다.
$json = '
{
"foo": "foo value",
"bar": "bar value",
"baz": "baz value"
}';
$assoc = json_decode($json, true);
foreach ($assoc as $key => $value) {
echo "The value of key '$key' is '$value'", PHP_EOL;
}
인쇄물
키 'foo'의 값은 'foo value'
입니다. 키 'bar'의 값은 'bar value'
입니다. 키 'baz'의 값은 'baz value'입니다.
데이터가 어떻게 구성되어 있는지 모름
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_decode()
보고 null
이것은 다음 중 하나 때문에 발생합니다.
- JSON은 전적으로 그것으로 구성됩니다
null
.
- JSON이 유효하지 않습니다. 결과를 확인
json_last_error_msg
하거나 JSONLint 와 같은 것을 통해 입력하십시오 .
- 512 레벨 이상 중첩 된 요소를 포함합니다. 이 기본 최대 깊이는 정수를 세 번째 인수로에 전달하여 재정의 할 수 있습니다
json_decode()
.
최대 깊이를 변경해야하는 경우 잘못된 문제를 해결하고있을 수 있습니다. 이렇게 깊이 중첩 된 데이터를 얻는 이유 (예 : JSON을 생성하는 쿼리하는 서비스에 버그가 있음)를 찾아서 발생하지 않도록하십시오.
객체 속성 이름에 특수 문자가 포함되어 있습니다
때로는 하이픈 -
이나 기호 @
로 리터럴 식별자로 사용할 수없는 객체 속성 이름이 있습니다 . 대신 중괄호 안에 문자열 리터럴을 사용하여이를 해결할 수 있습니다.
$json = '{"@attributes":{"answer":42}}';
$thing = json_decode($json);
echo $thing->{'@attributes'}->answer; //42
속성으로 정수가있는 경우 정수 와 같은 이름으로 객체 속성에 액세스하는 방법을 참조하십시오. 참고로.
누군가 JSON을 JSON에 넣습니다.
그것은 우스운 일이지만 발생합니다 .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에서 배열과 데이터를 정렬하는 모든 기본 방법을 참조 하십시오 .