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_IGNOREJSON_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()에서 생성한 출력을 처리할 수 있는지 테스트하십시오.


기타