개발 꿀팁/PHP

php 배열 개체 간 변환

Jammie 2022. 7. 1. 15:17
반응형

php 배열 개체 간 변환
전에 제가 php를 써서 jso로 돌아왔는데n데이터 간단한 예

버전 5.2부터 PHP 네이티브json_encode()와 json_d 제공ecode() 함수. 전자는 인코딩, 후자는 디코딩에 사용됩니다.

一、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}

객체 변환의 예를 하나 더 보자.

$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 코드를 사용할 때 이 점에 각별히 주의해야 한다.

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

PHP는 값(value)만 저장하는 인덱스 배열(indexed array)과 이름값 쌍(name/value)을 저장하는 연관 배열(associative array) 두 가지 어레이를 지원한다.

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

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

$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. 클래스(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)를 제외한 모든 것(상수, 사유변수, 방법 등)이 유실된 것을 볼 수 있다

四、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(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의 구분자(delimiter)가 큰따옴표만 사용할 수 있도록 허용한다는 것입니다.홑따옴표를 사용할 수 있습니다. 두 번째 오류는 json의 이름 쌍에 대한 이름(콜론 왼쪽 부분)입니다. 어떤 경우에도 큰따옴표를 사용해야 합니다.세 번째 오류는 마지막 값 뒤에 쉼표(trailing comma)를 붙일 수 없다는 것이다.

또 json은 객체(object)와 어레이(array)만 나타낼 수 있다.문자열이나 값이 json_decode() 를 사용하면 null을 반환합니다.

var_dump(json_decode("Hello World")); //null
반응형