반응형
PHP에서 객체를 JSON으로, JSON을 객체로 변환 (Java 용 Gson과 같은 라이브러리)
PHP로 웹 애플리케이션을 개발 중입니다.
서버에서 JSON 문자열로 많은 개체를 전송해야합니다. Java 용 Gson 라이브러리와 같이 개체를 JSON으로 변환하고 JSON 문자열을 Objec로 변환하는 PHP 용 라이브러리가 있습니까?
이것은 트릭을 할 것입니다!
// convert object => json
$json = json_encode($myObject);
// convert json => object
$obj = json_decode($json);
여기에 예가 있습니다.
$foo = new StdClass();
$foo->hello = "world";
$foo->bar = "baz";
$json = json_encode($foo);
echo $json;
//=> {"hello":"world","bar":"baz"}
print_r(json_decode($json));
// stdClass Object
// (
// [hello] => world
// [bar] => baz
// )
대신 객체의 배열로 출력을 원하는 경우, 패스 true
로json_decode
print_r(json_decode($json, true));
// Array
// (
// [hello] => world
// [bar] => baz
// )
json_encode () 에 대한 추가 정보
참조 : json_decode ()
대규모 앱의 확장 성을 높이려면 캡슐화 된 필드가있는 oop 스타일을 사용하세요.
간단한 방법 :-
class Fruit implements JsonSerializable {
private $type = 'Apple', $lastEaten = null;
public function __construct() {
$this->lastEaten = new DateTime();
}
public function jsonSerialize() {
return [
'category' => $this->type,
'EatenTime' => $this->lastEaten->format(DateTime::ISO8601)
];
}
}
echo json_encode (new Fruit ()); // 다음을 출력합니다.
{"category":"Apple","EatenTime":"2013-01-31T11:17:07-0500"}
PHP의 실제 Gson :-
- http://jmsyst.com/libs/serializer
- http://symfony.com/doc/current/components/serializer.html
- http://framework.zend.com/manual/current/en/modules/zend.serializer.html
- http://fractal.thephpleague.com/- 직렬화 만
json_decode($json, true);
// the second param being true will return associative array. This one is easy.
나는 이것을 해결하는 방법을 만들었다. 내 접근 방식은 다음과 같습니다.
1-Regex를 사용하여 개체를 배열 (개인 속성 포함)로 변환하는 메서드가있는 추상 클래스를 만듭니다. 2-반환 된 배열을 json으로 변환합니다.
이 Abstract 클래스를 모든 도메인 클래스의 부모로 사용합니다.
수업 코드 :
namespace Project\core;
abstract class AbstractEntity {
public function getAvoidedFields() {
return array ();
}
public function toArray() {
$temp = ( array ) $this;
$array = array ();
foreach ( $temp as $k => $v ) {
$k = preg_match ( '/^\x00(?:.*?)\x00(.+)/', $k, $matches ) ? $matches [1] : $k;
if (in_array ( $k, $this->getAvoidedFields () )) {
$array [$k] = "";
} else {
// if it is an object recursive call
if (is_object ( $v ) && $v instanceof AbstractEntity) {
$array [$k] = $v->toArray();
}
// if its an array pass por each item
if (is_array ( $v )) {
foreach ( $v as $key => $value ) {
if (is_object ( $value ) && $value instanceof AbstractEntity) {
$arrayReturn [$key] = $value->toArray();
} else {
$arrayReturn [$key] = $value;
}
}
$array [$k] = $arrayReturn;
}
// if it is not a array and a object return it
if (! is_object ( $v ) && !is_array ( $v )) {
$array [$k] = $v;
}
}
}
return $array;
}
}
반응형
'programing' 카테고리의 다른 글
Android 프로젝트에 도서관 프로젝트를 추가하는 방법은 무엇입니까? (0) | 2021.01.17 |
---|---|
블록을 여러 번 재사용하려면 어떻게해야합니까? (0) | 2021.01.17 |
AMD (require.js)를 사용하는 동안 Backbone.js에서 부트 스트랩 된 모델을로드하는 방법 (0) | 2021.01.17 |
Visual Studio가없는 컴퓨터에서 원격 디버깅을 설정하는 방법 (0) | 2021.01.17 |
Gorilla 툴킷을 사용하여 루트 URL로 정적 콘텐츠 제공 (0) | 2021.01.17 |