>  기사  >  백엔드 개발  >  PHP는 json을 어떻게 작동합니까? 방법 소개

PHP는 json을 어떻게 작동합니까? 방법 소개

青灯夜游
青灯夜游앞으로
2020-07-16 15:55:172827검색

이 기사에서는 PHP에서 json을 작동하는 방법과 json_decode()의 몇 가지 일반적인 오류를 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.
PHP는 json을 어떻게 작동합니까? 방법 소개

1. json_encode()

이 함수는 주로 배열과 객체를 json 형식으로 변환하는 데 사용됩니다. [관련 권장사항: 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}

그런 다음 객체 변환의 예를 살펴보세요:

$obj->body = 'another post';

$obj->id = 21;

$obj->approved = true;

$obj->favorite_count = 1;

$obj->status = NULL;

echo json_encode($obj);

 // 结果为

{
"body":"another post",

"id":21,

"approved":true,

"favorite_count":1,

"status":null
  }

json은 utf-8로 인코딩된 문자만 허용하므로 json_encode() 매개변수는 UTF-8로 인코딩되어야 합니다. 그렇지 않으면 null 문자 또는 null이 발생합니다. 중국어가 GB2312 인코딩을 사용하거나 외국어가 ISO-8859-1 인코딩을 사용하는 경우 이 점에 특별한 주의를 기울여야 합니다.

2. 인덱스 배열과 연관 배열

PHP는 두 가지 유형의 배열을 지원합니다. 하나는 "값"(값)만 저장하는 인덱스 배열이고, 다른 하나는 "이름-값 쌍"을 저장하는 인덱스 배열입니다. "(이름/값의 연관 배열).

javascript는 연관 배열을 지원하지 않기 때문에 json_encode()는 인덱스 배열만 배열 형식으로 변환하고 연관 배열은 객체 형식으로 변환합니다.

예를 들어 이제 인덱스 배열이 있습니다.

$arr = Array('one', 'two', 'three');
echo json_encode($arr);

결과는 다음과 같습니다.

["one","two","three"]

이를 연관 배열로 변경하면:

$arr = Array('1'=>'one', '2'=>'two', '3'=>'three');
echo json_encode($arr);

결과는 다음과 같이 변경됩니다.

 {"1":"one","2":"two","3":"three"}

데이터 형식이 "[]에서 변경됩니다. "(배열)은 "{}"(객체)가 되었습니다.

"인덱스 배열"을 "객체"로 강제 적용해야 하는 경우 다음과 같이 작성할 수 있습니다.

json_encode( (object)$arr );

또는

json_encode ( $arr, JSON_FORCE_OBJECT );

3. 클래스 변환

다음은 PHP 클래스입니다.

class Foo {

const ERROR_CODE = '404';

public $public_ex = 'this is public';

private $private_ex = 'this is private!';

protected $protected_ex = 'this should be protected';

public function getErrorCode() {

return self::ERROR_CODE;

}

}

이제 수행합니다. 이 클래스의 인스턴스에서 json 변환:

$foo = new Foo;

$foo_json = json_encode($foo);

echo $foo_json;

출력 결과는

{"public_ex":"this is public"}

입니다. 보시다시피 공용 변수(public)를 제외하고 다른 항목(상수, 전용 변수, 메서드 등)은 손실됩니다.

4.json_decode()

이 함수는 json 텍스트를 해당 PHP 데이터 구조로 변환하는 데 사용됩니다. 예를 들면 다음과 같습니다.

$json = '{"foo": 12345}';

$obj = json_decode($json);

print $obj->{'foo'}; // 12345

일반적으로 json_decode()는 항상 배열이 아닌 PHP 객체를 반환합니다. 예:

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

var_dump(json_decode($json));

결과는 PHP 개체를 생성하는 것입니다:

object(stdClass)#1 (5) {

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

}

PHP 연관 배열을 강제로 생성하려면 json_decode()에서 true 매개변수를 추가해야 합니다.

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

var_dump(json_decode($json,true));

결과는 연관 배열을 생성하는 것입니다. array:

array(5) {

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

}

5. json_decode()

의 일반적인 오류 json을 작성하는 다음 세 가지 방법이 모두 잘못되었습니다.

$bad_json = "{ 'bar': 'baz' }";

$bad_json = '{ bar: "baz" }';

$bad_json = '{ "bar": "baz", }';

이 세 문자열에 대해 json_decode()를 실행하면 null이 반환되고 오류가 보고됩니다.

첫 번째 실수는 json의 구분 기호가 작은 따옴표가 아닌 큰 따옴표만 허용한다는 것입니다. 두 번째 실수는 어떤 상황에서도 json 이름-값 쌍의 "이름"(콜론 왼쪽 부분)을 큰따옴표로 묶어 사용해야 한다는 것입니다. 세 번째 오류는 마지막 값 뒤에 쉼표를 추가할 수 없다는 것입니다.

또한 json은 객체와 배열을 나타내는 데에만 사용할 수 있습니다. json_decode()가 문자열이나 값에 사용되면 null이 반환됩니다.

아아아아

위 내용은 PHP는 json을 어떻게 작동합니까? 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제