>  기사  >  백엔드 개발  >  PHP에서 json_decode 및 json_encode 사용 방법 공유

PHP에서 json_decode 및 json_encode 사용 방법 공유

小云云
小云云원래의
2018-03-01 14:05:281414검색

json_decode와 json_encode는 모두 json 문자열입니다. 이 글은 주로 PHP에서 json_decode와 json_encode를 사용하는 방법을 공유합니다.

1.json_encode()

이 함수는 주로 배열과 객체를 json 형식으로 변환하는 데 사용됩니다. 먼저 배열 변환의 예를 살펴보세요.

$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이 발생합니다. 중국어가 GB2312 인코딩을 사용하거나 외국어가 ISO-8859-1 인코딩을 사용하는 경우 이 점에 특별한 주의를 기울여야 합니다.

인덱스 배열 및 연관 배열

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

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

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

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

결과는 다음과 같습니다:

["one","two","3"]

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

$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 ); 
class 변환

을 작성할 수 있습니다. 다음은 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)를 제외한 다른 것(상수, 전용 변수, 메소드 등)이 손실되는 것을 볼 수 있습니다.

2.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)  
} 
json_decode() 일반적인 실수

다음 3가지 json 작성 방법은 모두 잘못되었습니다. 어디에서 오류가 발생했는지 알 수 있나요?

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

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

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

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

3. JavaScript는 json 문자열을 사용합니다

JSON 문자열을 JSON 객체로 변환하는 방법

먼저 JSON 객체로 변환하려면 다음 방법을 사용하세요:

//由JSON字符串转换为JSON对象var obj = eval('(' + str + ')');

또는

var obj = str.parseJSON(); //由JSON字符串转换为JSON对象

또는

var obj = JSON.parse(str); //由JSON字符串转换为JSON对象

그러면 다음과 같이 읽을 수 있습니다. :

Alert(obj.name);Alert(obj.sex);

특별 참고 사항: obj가 원래 JSON 객체인 경우 eval() 함수를 사용하여 변환한 후에(여러 번 변환되더라도) 여전히 JSON 객체이지만 사용 후에는 문제가 발생합니다. 이를 처리하기 위해 parseJSON() 함수를 사용합니다(구문 예외 발생).

관련 권장사항:

json_decode가 php에서 특수 물음표 문자를 구문 분석할 수 없는 문제에 대한 솔루션

PHP가 중국어 메소드를 이스케이프하지 않고 json_decode를 구현하는 방법 소개

json_encode와 json_decode의 차이점을 비교하세요

위 내용은 PHP에서 json_decode 및 json_encode 사용 방법 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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