> 백엔드 개발 > PHP 튜토리얼 > PHP 언어에서 JSON을 사용하고 json을 배열로 복원하는 방법

PHP 언어에서 JSON을 사용하고 json을 배열로 복원하는 방법

不言
풀어 주다: 2023-03-29 14:38:01
원래의
1386명이 탐색했습니다.

이 글은 주로 PHP 언어에서 JSON을 사용하여 json을 배열로 줄이는 방법을 소개합니다. 이제 특정 참조 값이 있으므로 이를 참조할 수 있도록 공유합니다.

php return에 대해 작성했습니다. before json 데이터의 간단한 예. 방금 인터넷에 접속했는데 갑자기 json을 소개하는 기사를 발견했습니다. 꽤 자세하고 참고할만한 가치가 있었습니다. 내용은 다음과 같습니다

버전 5.2부터 PHP는 기본적으로 json_encode(), json_decode() 함수를 제공하는데, 전자는 인코딩에 사용되고 후자는 디코딩에 사용됩니다.

1.json_encode()

<?php 
$arr = array (&#39;a&#39;=>1,&#39;b&#39;=>2,&#39;c&#39;=>3,&#39;d&#39;=>4,&#39;e&#39;=>5); 
echo json_encode($arr); 
?>
로그인 후 복사

output

{"a":1,"b":2,"c":3,"d":4,"e":5}
로그인 후 복사

객체 변환의 또 다른 예를 살펴보세요:

$obj->body      = &#39;another post&#39;; 
$obj->id       = 21; 
$obj->approved    = true; 
$obj->favorite_count = 1; 
$obj->status     = NULL; 
echo json_encode($obj);
로그인 후 복사

out

{ 
    "body":"another post", 
   
    "id":21, 
   
    "approved":true, 
   
    "favorite_count":1, 
   
    "status":null 
  }
로그인 후 복사

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

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

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

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

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

$arr = Array(&#39;one&#39;, &#39;two&#39;, &#39;three&#39;); 
   
  echo json_encode($arr);
로그인 후 복사

출력

["one","two","three"]
로그인 후 복사

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

$arr = Array(&#39;1&#39;=>&#39;one&#39;, &#39;2&#39;=>&#39;two&#39;, &#39;3&#39;=>&#39;three&#39;); 
    
  echo json_encode($arr);
로그인 후 복사

출력은 다음과 같습니다.

rreee

주의하세요. 데이터 형식이 "[]"(배열)에서 "{}"(객체)로 변경됩니다.

"인덱스 배열"을 "객체"로 강제 변환해야 하는 경우

{"1":"one","2":"two","3":"three"}
로그인 후 복사

또는

json_encode( (object)$arr );
로그인 후 복사

과 같이 작성할 수 있습니다. 3. 클래스 변환

다음은 하나의 PHP입니다. class:

json_encode ( $arr, JSON_FORCE_OBJECT );
로그인 후 복사

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

class Foo { 
   
    const   ERROR_CODE = &#39;404&#39;; 
   
    public  $public_ex = &#39;this is public&#39;; 
   
    private  $private_ex = &#39;this is private!&#39;; 
   
    protected $protected_ex = &#39;this should be protected&#39;; 
    
    public function getErrorCode() { 
   
      return self::ERROR_CODE; 
   
    } 
   
  }
로그인 후 복사

출력 결과는

$foo = new Foo; 
   
  $foo_json = json_encode($foo); 
   
  echo $foo_json;
로그인 후 복사

보다시피 공용 변수( public), 다른 모든 것(상수, 개인 변수, 메소드 등)은 손실됩니다.

4.json_decode()

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

{"public_ex":"this is public"}
로그인 후 복사

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

 $json = &#39;{"foo": 12345}&#39;; 
    
  $obj = json_decode($json); 
   
  print $obj->{&#39;foo&#39;}; // 12345
로그인 후 복사

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

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; 
    
  var_dump(json_decode($json));
로그인 후 복사

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

object(stdClass)#1 (5) { 
   
    ["a"] => int(1) 
    ["b"] => int(2) 
    ["c"] => int(3) 
    ["d"] => int(4) 
    ["e"] => int(5) 
   
  }
로그인 후 복사

결과는 다음과 같습니다. 연관 배열이 생성됩니다:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; 
    
  var_dump(json_decode($json,true));
로그인 후 복사

5. json_decode()의 일반적인 오류

json을 작성하는 다음 세 가지 방법이 모두 잘못된 위치를 확인할 수 있습니다. 오류는?

array(5) { 
   
     ["a"] => int(1) 
     ["b"] => int(2) 
     ["c"] => int(3) 
     ["d"] => int(4) 
     ["e"] => int(5) 
   
  }
로그인 후 복사

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

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

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

$bad_json = "{ &#39;bar&#39;: &#39;baz&#39; }"; 
   
  $bad_json = &#39;{ bar: "baz" }&#39;; 
   
  $bad_json = &#39;{ "bar": "baz", }&#39;;
로그인 후 복사

관련 추천:


php json 파일을 읽고, 쓰고, 수정하는 방법

위 내용은 PHP 언어에서 JSON을 사용하고 json을 배열로 복원하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿