JSON json_encode
(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL json >= 1.2.0)
json_encode — 값의 JSON 표현을 반환합니다.
설명
json_encode(mixed $value
, int $flags
= 0, int $depth
= 512): string|false
제공된 value
의 JSON 표현을 포함하는 문자열을 반환합니다. 매개변수가 배열 또는 객체인 경우 재귀적으로 직렬화됩니다.
직렬화할 값이 객체인 경우 기본적으로 공개적으로 표시되는 속성만 포함됩니다. 또는 클래스에서 JsonSerializable을 구현하여 해당 값이 JSON으로 직렬화되는 방식을 제어할 수 있습니다.
인코딩은 제공된 flags
의 영향을 받으며 추가적으로 float 값의 인코딩은 serialize_precision 값에 따라 다릅니다.
매개변수
value
- 인코딩되는
value
입니다. resource를 제외한 모든 유형이 될 수 있습니다.모든 문자열 데이터는 UTF-8로 인코딩되어야 합니다.
메모: PHP는 원래 » RFC 7159에 지정된 대로 JSON의 상위 집합을 구현합니다.
flags
- Bitmask consisting of
JSON_FORCE_OBJECT
,JSON_HEX_QUOT
,JSON_HEX_TAG
,JSON_HEX_AMP
,JSON_HEX_APOS
,JSON_INVALID_UTF8_IGNORE
,JSON_INVALID_UTF8_SUBSTITUTE
,JSON_NUMERIC_CHECK
,JSON_PARTIAL_OUTPUT_ON_ERROR
,JSON_PRESERVE_ZERO_FRACTION
,JSON_PRETTY_PRINT
,JSON_UNESCAPED_LINE_TERMINATORS
,JSON_UNESCAPED_SLASHES
,JSON_UNESCAPED_UNICODE
,JSON_THROW_ON_ERROR
. 이러한 상수의 동작은 JSON constants 페이지에 설명되어 있습니다. depth
- 최대 깊이를 설정합니다. 0보다 커야 합니다.
반환 값
성공 시 JSON 인코딩 문자열을 반환하고 실패 시 false
를 반환합니다.
변경 로그
버전 | 설명 |
---|---|
7.3.0 | JSON_THROW_ON_ERROR flags 가 추가되었습니다. |
7.2.0 | JSON_INVALID_UTF8_IGNORE 및 JSON_INVALID_UTF8_SUBSTITUTE flags 가 추가되었습니다. |
7.1.0 | JSON_UNESCAPED_LINE_TERMINATORS flags 가 추가되었습니다. |
7.1.0 | double 값을 인코딩할 때 precision 대신 serialize_precision이 사용됩니다. |
Examples
예제 #1 json_encode() 예제
<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
?>
위의 예는 다음을 출력합니다.
{"a":1,"b":2,"c":3,"d":4,"e":5}
예제 #2 사용 중인 일부 플래그를 보여주는 json_encode() 예제
<?php
$a = array('<foo>',"'bar'",'"baz"','&blong&', "\xc3\xa9");
echo "Normal: ", json_encode($a), "\n";
echo "Tags: ", json_encode($a, JSON_HEX_TAG), "\n";
echo "Apos: ", json_encode($a, JSON_HEX_APOS), "\n";
echo "Quot: ", json_encode($a, JSON_HEX_QUOT), "\n";
echo "Amp: ", json_encode($a, JSON_HEX_AMP), "\n";
echo "Unicode: ", json_encode($a, JSON_UNESCAPED_UNICODE), "\n";
echo "All: ", json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "\n\n";
$b = array();
echo "Empty array output as array: ", json_encode($b), "\n";
echo "Empty array output as object: ", json_encode($b, JSON_FORCE_OBJECT), "\n\n";
$c = array(array(1,2,3));
echo "Non-associative array output as array: ", json_encode($c), "\n";
echo "Non-associative array output as object: ", json_encode($c, JSON_FORCE_OBJECT), "\n\n";
$d = array('foo' => 'bar', 'baz' => 'long');
echo "Associative array always output as object: ", json_encode($d), "\n";
echo "Associative array always output as object: ", json_encode($d, JSON_FORCE_OBJECT), "\n\n";
?>
위의 예는 다음을 출력합니다.
Normal: ["<foo>","'bar'","\"baz\"","&blong&","\u00e9"] Tags: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&","\u00e9"] Apos: ["<foo>","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"] Quot: ["<foo>","'bar'","\u0022baz\u0022","&blong&","\u00e9"] Amp: ["<foo>","'bar'","\"baz\"","\u0026blong\u0026","\u00e9"] Unicode: ["<foo>","'bar'","\"baz\"","&blong&","é"] All: ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","é"] Empty array output as array: [] Empty array output as object: {} Non-associative array output as array: [[1,2,3]] Non-associative array output as object: {"0":{"0":1,"1":2,"2":3}} Associative array always output as object: {"foo":"bar","baz":"long"} Associative array always output as object: {"foo":"bar","baz":"long"}
예제 #3 JSON_NUMERIC_CHECK 옵션 예시
<?php
echo "Strings representing numbers automatically turned into numbers".PHP_EOL;
$numbers = array('+123123', '-123123', '1.2e3', '0.00001');
var_dump(
$numbers,
json_encode($numbers, JSON_NUMERIC_CHECK)
);
echo "Strings containing improperly formatted numbers".PHP_EOL;
$strings = array('+a33123456789', 'a123');
var_dump(
$strings,
json_encode($strings, JSON_NUMERIC_CHECK)
);
?>
위의 예는 다음과 유사한 결과를 출력합니다.
Strings representing numbers automatically turned into numbers array(4) { [0]=> string(7) "+123123" [1]=> string(7) "-123123" [2]=> string(5) "1.2e3" [3]=> string(7) "0.00001" } string(28) "[123123,-123123,1200,1.0e-5]" Strings containing improperly formatted numbers array(2) { [0]=> string(13) "+a33123456789" [1]=> string(4) "a123" } string(24) "["+a33123456789","a123"]"
예제 #4 순차 배열 대 비순차 배열 예
<?php
echo "Sequential array".PHP_EOL;
$sequential = array("foo", "bar", "baz", "blong");
var_dump(
$sequential,
json_encode($sequential)
);
echo PHP_EOL."Non-sequential array".PHP_EOL;
$nonsequential = array(1=>"foo", 2=>"bar", 3=>"baz", 4=>"blong");
var_dump(
$nonsequential,
json_encode($nonsequential)
);
echo PHP_EOL."Sequential array with one key unset".PHP_EOL;
unset($sequential[1]);
var_dump(
$sequential,
json_encode($sequential)
);
?>
위의 예는 다음을 출력합니다.
Sequential array array(4) { [0]=> string(3) "foo" [1]=> string(3) "bar" [2]=> string(3) "baz" [3]=> string(5) "blong" } string(27) "["foo","bar","baz","blong"]" Non-sequential array array(4) { [1]=> string(3) "foo" [2]=> string(3) "bar" [3]=> string(3) "baz" [4]=> string(5) "blong" } string(43) "{"1":"foo","2":"bar","3":"baz","4":"blong"}" Sequential array with one key unset array(3) { [0]=> string(3) "foo" [2]=> string(3) "baz" [3]=> string(5) "blong" } string(33) "{"0":"foo","2":"baz","3":"blong"}"
예제 #5 JSON_PRESERVE_ZERO_FRACTION 옵션 예시
<?php
var_dump(json_encode(12.0, JSON_PRESERVE_ZERO_FRACTION));
var_dump(json_encode(12.0));
?>
위의 예는 다음을 출력합니다.
string(4) "12.0" string(2) "12"
메모
메모: 인코딩에 실패한 경우 json_last_error()를 사용하여 오류의 정확한 특성을 확인할 수 있습니다.
메모: 배열을 인코딩할 때 키가 0부터 시작하는 연속적인 숫자 시퀀스가 아닌 경우 모든 키는 문자열로 인코딩되고 각 키-값 쌍에 대해 명시적으로 지정됩니다.
참조 JSON 인코더와 마찬가지로 json_encode()는 입력 value
으로 string, int, float 또는 bool이 주어지면 간단한 값(즉, 객체도 배열도 아님)인 JSON을 생성합니다. 대부분의 디코더는 이러한 값을 유효한 JSON으로 받아들이지만 일부는 이 시점에서 사양이 모호하기 때문에 그렇지 않을 수 있습니다.
요약하자면, 항상 JSON 디코더가 json_encode()에서 생성한 출력을 처리할 수 있는지 테스트하십시오.
기타
- JsonSerializable
- json_decode() - JSON 문자열을 디코딩합니다.
- json_last_error() - 마지막으로 발생한 오류를 반환합니다.
- serialize() - 값의 저장 가능한 표현을 생성합니다.