>  기사  >  백엔드 개발  >  json_encode와 json_decode의 차이점 비교

json_encode와 json_decode의 차이점 비교

巴扎黑
巴扎黑원래의
2017-07-20 17:22:442119검색

JSON의 4가지 기본 원칙

1) 병렬 데이터는 쉼표(,)로 구분됩니다.
2) 매핑은 (":") 콜론으로 표시됩니다.
3) 병렬 데이터(데이터)의 집합은 대괄호( "[]")는
4) 매핑된 컬렉션(객체)을 중괄호("{}")로 표시합니다.

1.json_decode()

json_decode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_decode — JSON 형식으로 문자열 인코딩

지침
mixed json_decode ( string $ json [, bool $assoc ] )
JSON 형식 문자열을 받아 PHP 변수로 변환합니다.

Parameters

json
디코딩할 json 문자열 형식 문자열.

assoc
이 매개변수가 TRUE이면 객체 대신 배열이 반환됩니다.


객체를 반환하거나 선택적 assoc 매개 변수가 TRUE인 경우 연관 배열이 대신 반환됩니다.

Example

Example #1 json_decode()의 예

다음과 같이 코드를 복사하세요.

< ;? php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'
var_dump(json_decode($json))
var_dump(json_decode($json, true));
?>

위의 예는 다음과 같이 출력됩니다.

다음과 같이 코드를 복사합니다.

object(stdClass)#1 (5) {
[" a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e" ] => int(5)
}

array(5) {
["a"] => int(1)
["b"] => int(2)
[" c"] = > int(3)
["d"] => int(4)
["e"] => int(5)
}


다음과 같이 코드를 복사하세요.

$data=' [{"이름":"a1","번호":"123","Contno":"000","QQNo":""},{"이름":"a1","번호":"123" ,"Contno":"000","QQNo":""},{"이름":"a1","번호":"123","Contno":"000","QQNo ":""}] ';
echo json_decode($data);

결과는 다음과 같습니다.

다음과 같이 코드를 복사합니다.

Array ( [0] => stdClass Object ( [이름] => ; a1 [번호] ] => 123 [계속번호] => 000 [QQNo] => ) [1] => stdClass 객체 ( [이름] => a1 [번호] => 123 [계속번호] = > 000 QQNo] => ) [2] => stdClass Object ( [이름] => a1 [번호] => 123 [Contno] => 000 [QQNo] => ) )

json_decode()로 컴파일된 객체가 객체임을 확인하세요. 이제 json_decode($data,true)

다음과 같이 코드를 복사하세요.

echo json_decode($data,true)

결과 :

다음과 같이 코드를 복사하세요.

Array ( [0] => Array ( [이름] => a1 [번호] => 123 [Contno] => 000 [QQNo] => ) [1] => 배열 ( [이름] => a1 [번호] => 123 [Contno] => 000 [QQNo] => ) [2] => 배열 ( [이름] => ; a1 [Number] => 123 [Contno] => 000 [QQNo] => ) )

json_decode($data,true)를 통해 확인할 수 있습니다. json_decode($ data)는 객체를 출력하고 json_decode("$arr",true)는 객체가 PHP 연관 배열을 생성하도록 강제합니다.

2.json_encode()

json_encode
(PHP 5 >= 5.2.0, PECL json > ;= 1.2.0)

json_encode — 변수의 JSON 인코딩

버그 신고 설명
string json_encode (mixed $value [, int $options = 0 ] )
값의 JSON 형식 반환

버그 신고 매개변수


인코딩할 값은 리소스 유형을 제외한 모든 데이터 유형일 수 있습니다.

이 함수는 UTF-8로 인코딩된 데이터만 허용합니다.

옵션
다음 상수로 구성된 바이너리 마스크: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS , JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_UNESCAPED_UNICODE

버그 신고 반환 값
인코딩이 성공하면 JSON 형식으로 표현된 문자열을 반환하고, 실패하면 FALSE를 반환합니다.

버그 신고 업데이트 로그
버전 설명
5.4.0 옵션 매개변수에 상수가 추가되었습니다: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES 및 JSON_UNESCAPED_UNICODE.
5.3.3 옵션 매개변수는 JSON_NUMERIC_CHECK 상수를 추가합니다.
5.3.0에서는 옵션 매개변수를 추가합니다.


버그 신고 예시

예제 #1 json_encode() 예시

다음과 같이 코드를 복사하세요.


$arr = 배열('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=> 5);

echo json_encode($arr);
?>


위 루틴은 다음을 출력합니다.

다음과 같이 코드를 복사합니다. , "c":3,"d":4,"e":5}



예제 #2 json_encode() 함수에서 옵션 매개변수 사용


다음과 같이 코드를 복사하세요.

$a = array('',"'bar'",'"baz"','&blong&', "xc3xa9")


echo "Normal: ", json_encode($a), " n" ;
echo "태그: ", 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 "유니코드: ", json_encode($a, JSON_UNESCAPED_UNICODE), "n"; "All : ", json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "nn";

$b = array();

echo "빈 배열 출력: ", json_encode($b ), "n";
echo "빈 배열 출력: ", json_encode($b, JSON_FORCE_OBJECT), "nn"

$c = array(array(1,2,3))

echo " 배열로 비연관 배열 출력: ", json_encode($c), "n";
echo "객체로 비연관 배열 출력: ", json_encode($c, JSON_FORCE_OBJECT), "nn";

$d = array( 'foo' => 'bar', 'baz' => 'long');

echo "연관 배열은 항상 객체로 출력됩니다: ", json_encode($d), "n"; 배열은 항상 객체로 출력됩니다: ", json_encode($d, JSON_FORCE_OBJECT), "nn";
?>



위 루틴은 다음을 출력합니다:

다음과 같이 코드를 복사합니다:



Normal: [" 태그: ["u003Cfoou003E","'bar'",""baz"","&blong&", "u00e9" ]

Apos: ["","u0027baru0027",""baz"","&blong&","u00e9"]

인용문: ["","'bar'", "u0022bazu0022" ,"&blong&","u00e9"]

Amp: ["","'bar'",""baz"","u0026blongu0026","u00e9"]
유니코드: ["< foo>" ,"'bar'",""baz"","&blong&","é"]
All: ["u003Cfoou003E","u0027baru0027","u0022bazu0022","u0026blongu0026","é"]

배열로 빈 배열 출력: []
객체로 빈 배열 출력: {}

배열로 비연관 배열 출력: [[1,2,3]]
객체로 비연관 배열 출력: {"0": {"0 ":1,"1":2,"2":3}}

연관 배열은 항상 객체로 출력됩니다: {"foo":"bar","baz":"long"}
연관 배열은 항상 객체로 출력: {"foo":"bar","baz":"long"}



예제 #3 연속 및 비연속 배열의 예

다음과 같이 코드를 복사하세요.



< ?php

echo "연속 배열".PHP_EOL;

$순차 = array("foo", "bar", "baz", "blong")

var_dump(

$순차,
json_encode($순차)
);

echo PHP_EOL." 비연속 배열".PHP_EOL;
$비순차적 = array(1=>"foo", 2=>"bar", 3=>"baz", 4=>"blong ");
var_dump(
$nonential,
json_encode($nonential)
);

echo PHP_EOL."연속 배열 값을 삭제하여 생성된 비연속 배열".PHP_EOL;
unset($순차[1]) ;
var_dump(
$ential ,
json_encode($series)
)
?>



위 루틴은 다음과 같이 출력합니다.


연속 배열
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=> 3) "baz"
[3]=>
string(5) "blong"
}
string(27) "["foo","bar","baz","blong"]"

non- 연속 배열
array(4) {
[1]=>
string(3) "foo"
[2]=>
string(3) "bar"
[3]=> " baz"
[4]=>
string(5) "blong"
}
string(43) "{"1":"foo","2":"bar","3":"baz" , "4":"blong"}"

연속적인 배열 값을 삭제하여 생성된 비연속적인 배열
array(3) {
[0]=>
string(3) "foo"
[2]= > ;
string(3) "baz"
[3]=>
string(5) "blong"
}
string(33) "{"0":"foo","2":"baz", " 3":"blong"}"



코드를 다음과 같이 복사하세요:

$obj->Name= 'a1';$obj->Number ='123';

$obj- > Contno= '000';
echo json_encode($obj);


결과는 다음과 같습니다.



다음과 같이 코드를 복사하세요.

{"이름":"a1",

"번호": "123",
"Contno":"000"
}


json_encode() 및 json_decode()는 컴파일 및 디컴파일 프로세스임을 알 수 있습니다. json은 utf-8 인코딩 문자만 허용하므로 매개변수는 json_encode()는 UTF-8 인코딩이어야 합니다. 그렇지 않으면 빈 문자 또는 null이 발생합니다.


json

디코딩할 json 문자열 형식의 문자열입니다.

assoc
이 매개변수가 TRUE이면 객체 대신 배열이 반환됩니다.


객체를 반환하거나 선택적 assoc 매개 변수가 TRUE인 경우 연관 배열이 대신 반환됩니다.

Example

Example #1 json_decode()의 예


다음과 같이 코드를 복사하세요.

< ;? php

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'

var_dump(json_decode($json))
var_dump(json_decode($json, true));
?>


위의 예는 다음과 같이 출력됩니다.

다음과 같이 코드를 복사합니다.

object(stdClass)#1 (5) {

["a" ] => int(1)

["b"] => int(2)
["c"] => int(3)
["d"] => e"] => int(5)
}

array(5) {
["a"] => int(1)
["b"] => int(2)
["c" ] => int(3)
["d"] => int(4)
["e"] => int(5)
}



다음과 같이 코드를 복사하세요. data ='[{"이름":"a1","번호":"123","Contno":"000","QQNo":""},{"이름":"a1","번호": " 123","Contno":"000","QQNo":""},{"이름":"a1","번호":"123","Contno":"000","QQNo":" " }]';
echo json_decode($data);


결과는 다음과 같습니다.

다음과 같이 코드를 복사합니다.


Array ( [0] => stdClass Object ( [이름] => a1 [ 번호] = > 123 [계속번호] => 000 [QQNo] => ) [1] => stdClass 객체( [이름] => a1 [번호] => 123 [계속번호] => 000 [QQNo] => ) [2] => stdClass 객체 ( [이름] => a1 [번호] => 123 [Contno] => 000 [QQNo] => )



json_decode() 이후에 컴파일된 개체가 개체입니다. 이제 json_decode($data,true)를 출력해 보세요.

다음과 같이 코드를 복사하세요.



echo json_decode($data,true);


다음과 같이 코드를 복사하세요:

Array ( [0] => Array ( [이름] => a1 [번호] => 123 [Contno] => 000 [QQNo] => ) [ 1] => 배열( [ 이름] => a1 [번호] => 123 [Contno] => 000 [QQNo] => ) [2] => 배열( [이름] => a1 [번호] => 123 [ 계속] => 000 [QQNo] => )



json_decode($data,true)가 연관 배열을 출력하는 것을 볼 수 있습니다. 여기서 json_decode($data)가 객체를 출력하고 json_decode("$arr",true)가 강제로 PHP 연관 배열을 생성한다는 것을 알 수 있습니다. array.

2.json_encode()

json_encode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_encode — 변수의 JSON 인코딩

버그 신고 설명
string json_encode ( 혼합 $ 값 [, int $options = 0 ] )
값의 JSON 형식 반환

버그 매개변수 보고

value
인코딩할 값은 리소스 유형을 제외하고 모든 데이터 유형이 될 수 있습니다.

이 함수는 UTF-8로 인코딩된 데이터

옵션
다음 상수로 구성된 이진 마스크: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_UNESCAPED_ UNICODE
.
버그 신고 반환 값
다음 중 하나를 반환합니다. 인코딩이 성공했습니다. 실패 시 JSON 또는 FALSE로 표시되는 문자열입니다.

버그 신고 변경 로그
버전 설명
5.4.0 옵션 매개변수에 상수가 추가되었습니다: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES 및 JSON_UNESCAPED_UNICODE.
5.3.3 옵션 매개변수는 JSON_NUMERIC_CHECK 상수를 추가합니다.
5.3.0 옵션 매개변수 추가


버그 신고 예시

예제 #1 json_encode() 예시

다음과 같이 코드를 복사하세요.


$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() 함수에서 옵션 매개변수 사용

다음과 같이 코드를 복사하세요:

$a = array('',"'bar'", '" baz"','&blong&', "xc3xa9");

echo "일반: ", json_encode($a), "n"
echo "태그: ", 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 ), " nn";

$b = array();

echo "배열로 빈 배열 출력: ", json_encode($b), "n";
echo "객체로 빈 배열 출력: ", json_encode( $b, JSON_FORCE_OBJECT), "nn";

$c = array(array(1,2,3));

echo "비연관 배열을 배열로 출력: ", json_encode($c), "n" ;
echo "객체로의 비연관 배열 출력: ", json_encode($c, JSON_FORCE_OBJECT), "nn";

$d = array('foo' => 'bar', 'baz' => long') ;

echo "연관 배열은 항상 객체로 출력됩니다: ", json_encode($d), "n";
echo "연관 배열은 항상 객체로 출력됩니다: ", json_encode($d, JSON_FORCE_OBJECT), "nn" ;
? >

위 루틴은 다음을 출력합니다.

다음과 같이 코드를 복사합니다.


일반: ["","'bar'",""baz"","&blong&","u00e9"]
태그: ["u003Cfoou003E","'bar'",""baz" ","&blong&","u00e9"]
사진: ["","u0027baru0027",""baz"","&blong&","u00e9"]
인용: ["", "'bar'","u0022bazu0022","&blong&","u00e9"]
Amp: ["","'bar'",""baz"","u0026blongu0026","u00e9"]
유니코드: ["","'bar'",""baz"","&blong&","é"]
All: ["u003Cfoou003E","u0027baru0027","u0022bazu0022","u0026blongu0026", "é"]

빈 배열을 배열로 출력: []
빈 배열을 객체로 출력: {}

비연관 배열을 배열로 출력: [[1,2,3]]
비연관 배열을 객체로 출력 : {"0":{"0":1,"1":2,"2":3}}

연관 배열은 항상 객체로 출력됩니다: {"foo":"bar","baz":"long "}
연관 배열은 항상 객체로 출력됩니다: {"foo":"bar","baz":"long"}


예제 #3 연속 및 비연속 배열 예

코드 복사 코드는 다음과 같습니다. :


< ;?php
echo "연속 배열".PHP_EOL;
$순차 = array("foo", "bar", "baz", "blong")
var_dump(
$순차,
json_encode( $순차)
) ;

echo PHP_EOL."비연속 배열".PHP_EOL;
$비순차 = array(1=>"foo", 2=>"bar", 3=>"baz", 4=>"blong");
var_dump(
$nonseries,
json_encode($nonseries)
);

echo PHP_EOL. "연속적인 배열 값을 삭제하여 생성된 비연속적인 배열".PHP_EOL; $series[1])
var_dump(
$series,
json_encode($series)
)
?>

위 루틴은 다음을 출력합니다:

코드 복사:

연속 배열
array(4) {
[ 0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=> "baz"
[3]=>
string(5) "blong"
}
string(27) "["foo","bar","baz","blong"]"

비연속 배열
array(4) {
[1]= >
string(3) "foo"
[2]=>
string(3) "bar"
[3]=> "
[4]=>
string( 5) "blong"
}
string(43) "{"1":"foo","2":"bar","3":"baz"," 4":"blong"}"

Delete 연속 배열 값을 통해 생성된 비연속 배열 ​​
array(3) {
[0]=>
string(3) "foo"
[2] =>
string(3) "baz"
[3 ]=>
string(5) "blong"
}
string(33) "{"0":"foo","2":"baz" ,"3":"blong"}"



다음과 같이 코드를 복사합니다:


$obj->Name= 'a1';$obj->Number ='123';

$obj-> ;Contno= '000';

echo json_encode($obj);


결과는 다음과 같습니다.

다음과 같이 코드 코드를 복사하세요.

{"Name":"a1",

"Number":"123 ",

"Contno":"000"
}


json_encode() 및 json_decode()가 컴파일 및 디컴파일 프로세스임을 알 수 있습니다. json은 utf-8로 인코딩된 문자만 허용하므로 json_encode()의 매개변수는 utf-8로 인코딩되어야 합니다. 그렇지 않으면 빈 문자나 null이 표시됩니다.

위 내용은 json_encode와 json_decode의 차이점 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.