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
'개발 꿀팁 > PHP' 카테고리의 다른 글
vscode의 php 플러그인 및 설정 (0) | 2022.07.01 |
---|---|
PHP 함수 취약성 요약 (0) | 2022.07.01 |
centos에서 php5.3에서 php5.6으로 업그레이드 (0) | 2022.07.01 |
PHP 설치Xdebug (0) | 2022.07.01 |
PHP는 과학적 카운트 포맷을 숫자 문자열로 변환하고, PHP는 필드 varchar 타입으로 비교 정렬합니다 (0) | 2022.07.01 |