원본 링크: http://hi.baidu.com/lostdays/blog/item/8d76c300ec4e3c15738b65fa.html
종합 카탈로그
무엇을, 왜, 어떻게
무엇을
왜
PHP 직렬화 구문
방법
PHP 직렬화 예
JavaScript에서 JSON으로 직렬화 — json2.js 사용
JSON
json_decode 함수
와 함께프로토타입.js PHP를 사용하여 JavaScript에서 JSON으로 직렬화
json_encode 함수
json_decode 함수 예시
json_encode 함수 예제
연습은 진정한
지식 배경 설명을
제공합니다
프론트엔드 자바스크립트 부분
백엔드 PHP 부분
What, Why, How
What
좋아, 사랑하는 친구여, 이 새로운 개념의 여정을 시작해보자. 아마도 이전에는 모두가 직렬화라는 주제에 별로 관심을 두지 않았을 수도 있다. 사실 이 주제는 내가 우연히 PHP 매뉴얼을 훑어본 날부터 시작되었다. 그리고 이 직렬화를 발견했습니다. 그 후 심심해서 워드프레스 플러그인을 만들었습니다. 이때 직렬화를 사용했는데 어떤 상황에서는 정말 매우 편리하다는 것을 알았습니다.
먼저 직렬화에 대해 설명하겠습니다. 간단히 말해서 직렬화는 변수를 바이트 스트림으로 변환하는 프로세스입니다. 직렬화를 도입하면 객체 저장 및 전송 문제가 효과적으로 해결됩니다. 예를 들어, JavaScript로 객체를 생성했는데 이제 이 객체를 서버 측 데이터베이스에 저장하고 싶은데, 이번에는 직렬화를 어떻게 작동합니까? 객체를 자주 사용합니다. JavaScript 직렬화에서 JSON(JavaScript Object Notation)은 경량 데이터 교환 형식을 언급해야 합니다. 사람이 읽고 쓰기 쉽고, 기계가 구문 분석하고 생성하기도 쉽습니다. 이는 표준 ECMA-262 3판(1999년 12월)의 하위 집합인 JavaScript 프로그래밍 언어를 기반으로 합니다. JSON은 완전히 언어 독립적인 텍스트 형식을 사용하지만 C 언어 계열(C, C++, C#, Java, JavaScript, Perl, Python 등 포함)과 유사한 규칙도 사용합니다. 이러한 속성은 JSON을 이상적인 데이터 교환 언어로 만듭니다.
사람들은 일반적으로 JSON과 XML을 비교합니다. 둘 다 객체를 평면화하는 수단입니다(이 "평면화"에 대해서는 나중에 설명하겠습니다). XML은 엄격한 구조가 특징인 반면 JSON은 사용하기 쉽습니다. 분석용 프로그램은 다음 코드와 같이 객체를 문자 스트림의 형태로 쉽게 변환할 수 있기 때문입니다.
코드:
{"type":"human","name":"hanguofeng","age": 22 }는
객체를 저장하는 JSON 표현식입니다. 객체로 복원하려면 어떻게 해야 하나요? 다음과 같이 매우 간단합니다.
코드:
varanimal_str = '{"type":"human","name":"hanguofeng","age":22}';
varanimal2=eval('('+animal_str+')');
JavaScript 평가 함수를 사용하여 JSON 표현식을 연산하고 값을 반환하여 객체를 얻습니다. JSON 형식을 만든 사람의 생각을 존경합니다. 원래는 직렬화에 대해 이야기하려고 했는데, "우연히" JSON을 언급하고 너무 많이 이야기했군요. 하하, 주제에서 벗어났나요? 아니요, PHP 직렬화는 JSON과 매우 유사합니다. PHP 직렬화 표현식은 다음과 같습니다
.
a:3:{s:4:"유형";s:5:"인간";s:4:"이름";s:10:"hanguofeng";s:3:"나이";s:2:" 20";}
실제로 이 표현식은 다음 배열의 직렬화된 결과입니다.
암호:
$동물 =
정렬
(
"유형" => "인간",
"이름" => "한궈펑",
"나이" => "20"
);
자, 위의 소개는 직렬화와 JSON이 무엇인지 대략적으로 설명하기 위한 것입니다. 여기서는 코드에 너무 얽매일 필요가 없습니다. 이에 대해 나중에 자세히 설명하겠습니다. 직렬화를 사용하십시오.
이유
는 JavaScript로 객체를 생성했기 때문입니다. 이제 이 객체를 서버 측 데이터베이스에 저장하려면 어떻게 해야 합니까? 사실 "브라우저에서 서버로 개체를 어떻게 제출합니까?"라는 질문입니다. 이 전송 과정에서 우리는 문자 스트림만 실제로는 1차원(플랫)으로 전송될 수 있다는 것을 알고 있습니다. 하지만 다차원적입니다. 전송하려는 객체가 문자열이면 매우 간단합니다. 전송하려는 객체가 배열이나 다른 구조라면 바로 사용할 수 있습니다. 예를 들어 전화로 그를 설명하려면 이름이 무엇인지 물어보면 이름이 장산(Zhang San)이나 리시(Li Si)라고 대답하고, 어떻게 생겼는지 물어보면 어떻게 생겼는지 물어보면 됩니다. , 단어를 사용해야 합니다. 우리가 데이터를 전송하는 매체는 종종 문자 스트림만 전송할 수 있는 이 전화선과 동일하며 객체를 설명하는 프로세스는 실제로 직렬화 프로세스라고 설명되었습니다. .
또한 직렬화는 객체의 영구 저장에도 사용될 수 있습니다. 아마도 저처럼 데이터베이스의 특정 필드에 객체를 저장하는 것에 대해 생각해 본 적이 있을 것입니다. 이제 이 작업을 매우 간단하게 수행할 수 있으며, 데이터베이스 필드는 필요하지 않습니다. 특별한 형식으로 설정하려면 varchar로 설정하면 됩니다(물론 개체가 큰 경우 텍스트로 설정해야 할 수도 있습니다).
PHP 직렬화 구문
좋습니다
. 이 섹션의 마지막 부분에서는 PHP를 사용하여 데이터를 직렬화 및 역직렬화하는 방법, JavaScript를 직렬화하는 방법에 대한 질문을 이해했다고 생각합니다. 객체(즉, JSON 형식으로 변경) 및 객체를 역직렬화하는 방법 마지막으로 JSON과 PHP 직렬화 간의 관계를 설정하는 방법입니다.
PHP는 직렬화 및 역직렬화 작업을 위해 두 가지 함수를 제공합니다: serialize() 및 unserialize(). 이 두 함수는 PHP4 및 PHP5에 적합합니다.
serialize()
(PHP 4, PHP 5, PECL axis2) :0.1.0-0.1.1)
serialize — 저장 가능한 표현 값을 가져옵니다.
문자열
직렬화(혼합 $value)
저장 가능한 표현 값을 가져옵니다. 이 함수는 PHP 변수 값과 구조를 손실 없이 저장하거나 전송하는 데 사용됩니다.
직렬화된 값을 다시 PHP 변수로 변환해야 하는 경우 unserialize() 함수를 사용할 수 있습니다.
매개변수
값
즉, 직렬화되는 표현식입니다. serialize()는 리소스 포인터를 제외한 모든 유형을 처리하며 자신을 가리키는 요소가 포함된 배열을 직렬화할 수도 있습니다. 루프 포인터를 포함하는 직렬화한 배열이나 객체는 계속 저장되지만 다른 포인터는 손실됩니다.
객체를 직렬화할 때 PHP는 먼저 해당 멤버 함수 __sleep()을 호출하려고 시도합니다. 이렇게 하면 객체가 직렬화되기 전에 최종 정리와 같은 작업이 가능해집니다. 마찬가지로, unserialize() 함수를 사용하여 객체를 복원하면 멤버 함수 __wakeup()이 호출됩니다.
반환 값은
어디에나 저장할 수 있는 개체의 바이트 스트림 표현식이 포함된 문자열을 반환합니다.
unserialize()
(PHP 4, PHP 5, PECL 축2:0.1.0-0.1.1)
저장된 표현식 혼합 unserialize에서 PHP 변수 값을
가져옵니다
( string $str ).
unserialize()는 간단한 유형의 직렬화된 변수를 가져와 이를 다시 PHP 변수 값으로 변환합니다.
매개변수
str
직렬화된 문자열 역직렬화된 변수가 객체인 경우 객체의 구조를 성공적으로 복원한 후 PHP는 자동으로 객체의 __wakeup() 멤버 함수(존재하는 경우)를 실행하려고 시도합니다.
unserialize_callback_func 지시문: 역직렬화 중에 정의되지 않은 클래스를 인스턴스화해야 하는 경우(불완전한 개체 "__PHP_Incomplete_Class"를 가져오는 것을 방지하기 위해) 이 프로세스 중에 실행될 콜백 함수를 설정할 수 있습니다. php.ini, ini_set() 또는 .htaccess를 사용하여 "unserialize_callback_func"를 정의할 수 있습니다. 정의되지 않은 클래스가 인스턴스화될 때 호출됩니다. 이 기능을 비활성화하려면 간단히 공백으로 설정하세요.
반환 값은
부울 변수, 실수, 부동 소수점 숫자, 문자열, 배열 또는 객체일 수 있는 변환된 값을 반환합니다.
들어오는 문자열을 역직렬화할 수 없으면 FALSE가 반환되고 NOTICE 오류가 발생합니다.
(위 내용은 PHP 매뉴얼에서 번역되었습니다.)
PHP 직렬화 인스턴스
배열의 직렬화 및 역직렬화
예를 들어 보겠습니다. 먼저 이 파일에서 다음 명령문을 사용합니다. 배열:
코드:
<?php
$동물 =
정렬
(
"유형" => "인간",
"이름" => "한궈펑",
"나이" => "20"
);
?>
이 배열의 값을 테스트하려면 print_r() 함수를 사용하여 배열을 출력하면 됩니다.
코드:
정렬
(
[유형] => 인간
[이름] => 한궈펑
[나이] => 20
)
그런 다음 직렬화해 보겠습니다. 직렬화 코드는 다음과 같습니다
.
<?php
$동물 =
정렬
(
"유형" => "인간",
"이름" => "한궈펑",
"나이" => "20"
);
$animal_ser=직렬화($animal);
에코($animal_ser);
?>
여기서는 $animal 배열을 직렬화하고 반환된 직렬화된 문자열을 $animal_ser 변수에 저장한 후 출력합니다. 코드
:
a:3:{s:4:"유형";s:5:"인간";s:4:"이름";s:10:"hanguofeng";s:3:"나이";s:2:" 20";}
이 문자열을 간단히 구문 분석해 보겠습니다.
a:3은 이것이 세 개의 내장 객체(3)를 갖는 배열 객체(a)임을 나타냅니다.
중괄호 안의 부분은 쉼표로 구분된 객체 표현식 목록입니다. s:4:"type"을 예로 들면 길이가 4자리(4)이고 값이 "type"인 문자열을 나타냅니다. , 즉 해시 배열의 첫 번째 요소의 키입니다.
다음 부분에서는 자세히 다루지 않겠습니다. 다양한 개체를 직접 직렬화하고 직렬화된 문자열이 어떻게 구성되는지 확인할 수 있습니다.
배열의 역직렬화, 즉 위에서 생성한 직렬화된 문자열을 배열로 복원하는 방법을 살펴보겠습니다. 코드는 다음과 같습니다
.
<?php
$animal_ser='a:3:{s:4:"유형";s:5:"인간";s:4:"이름";s:10:"hanguofeng";s:3:"나이";s :2:"20";}';
$animal = unserialize($animal_ser);
print_r($동물);
?>
첫 번째 줄에서는 $animal_ser의 값이 위에서 얻은 직렬화된 문자열이라고 가정합니다. 두 번째 줄에서는 해당 문자열이 시작 배열로 복원되고 마지막으로 $animal 배열이 출력됩니다. time 출력은 이 섹션 시작 부분의 원래 배열 출력과 동일합니다. 즉,
코드:
정렬
(
[유형] => 인간
[이름] => 한궈펑
[나이] => 20
)
이런 방식으로 배열의 역직렬화를 완료했습니다.
지식 확장 - 사용자 정의 객체의 직렬화 및 역직렬화
배열을 직렬화하는 것은 기본적인 작업입니다. 그러나 실제 프로그래밍에서는 사용자 정의 객체가 직렬화되는 것과 같은 다른 유형의 변수를 직렬화할 수도 있습니다. 여기에 직접 작성한 클래스 A가 있습니다(classa에 저장됨). .inc):
코드:
<?php
클래스 A {
var $one = 1;
함수 show_one() {
echo $this->one;
}
}
?>
클래스의 인스턴스를 생성하고 다음 코드에서 인스턴스를 직렬화합니다.
코드:
<?php
include("classa.inc");
$a=새로운 A;
echo(직렬화($a));
?>
이때 출력 내용은 다음과 같습니다
.
O:1:"A":1:{s:3:"하나";i:1;}
전반적으로 이 직렬화된 문자열은 객체의 현재 상태, 즉 i 값이 1을 출력합니다. 세부 사항을 하나씩 분석해 보겠습니다. O:1: 현재 변수는 사용자 정의 개체이므로 특성화 문자는 개체를 의미하는 "O"입니다. 다음 "A"는 변수가 인스턴스인 클래스를 식별합니다. 여기서는 클래스 A입니다. 중괄호 안에는 인스턴스의 각 속성의 이름과 값이 있습니다. 그런 다음 역직렬화합니다.
코드:
<?php
include("classa.inc");
$s = 'O:1:"A":1:{s:3:"1";i:1;}';
$a = 직렬화 해제($s);
$a->show_one();
?>
이때 "1"이 출력된다. 즉, A클래스의 show_one() 메소드가 호출된다. 인스턴스의 직렬화된 문자열에는 클래스 메서드가 포함되어 있지 않지만 역직렬화한 후에도 클래스 메서드를 호출할 수 있습니다. 이 기능은 PHP4 이상에서 지원됩니다(물론 클래스 정의 파일을 포함해야 함). classa.inc).
참고: PHP 매뉴얼의 언어 참조->클래스 및 객체->객체 직렬화 - 세션의 객체 섹션을 참조할 수 있습니다.
JavaScript에서 JSON으로 직렬화 - json2.js 사용
JavaScript에서 직접 개체를 직렬화하는 기본 제공 방법은 없지만, 여기서는 여유롭게 미리 만들어진 JSON 구성 요소를 사용하는 것이 좋습니다. 공식 웹사이트 www.json.org 에서는 JavaScript 객체의 JSON 직렬화를 위한 코드 라이브러리인 json2.js를 제공하며, 여기에서 얻을 수 있습니다.
json2.js 파일을 구한 후 이 파일을 열면 됩니다. 파일의 첫 번째 부분에는 상당한 양의 주석 정보가 포함되어 있습니다. 영어 실력이 충분하다면 이 섹션을 생략하고 파일의 주석만 참조해도 됩니다. 좋아, 만약 프로그래머로서 당신이 충분한 글자를 보았고 나의 한자 + 글자를 보고 싶다면 계속해서 아래로 내려갈 수 있습니다.
이 주석을 간단히 번역해 보세요. http://www.JSON.org/js.html을 참조하세요. 이 파일은 두 가지 메서드를 포함하는 전역 객체 JSON을 생성합니다.
코드:
JSON.stringify(값, 화이트리스트)
JavaScript 값(일반적으로 객체 또는 배열)을 평가합니다.
화이트리스트 개체 값이 직렬화되는 방법을 결정하는 데 사용되는 선택적 배열 매개 변수입니다. 이 메서드는 JavaScript 값에서 JSON 텍스트를 생성합니다. 직렬화할 때 선택적 매개변수 허용 목록을 기반으로 세 가지 가능성이 있습니다.
객체에 toJSON 메서드가 있는 경우 이 메서드를 호출하면 toJSON 메서드의 반환 값이 직렬화됩니다.
그렇지 않고 선택적 화이트리스트 매개변수가 배열인 경우 배열의 요소는 직렬화를 위해 개체의 구성원을 선택하는 데 사용됩니다.
그렇지 않고 화이트리스트 매개변수가 사용되지 않으면 객체의 모든 멤버가 직렬화됩니다.
값에 정의되지 않음 또는 함수와 같은 JSON 표현이 없으면 직렬화되지 않습니다. 객체에서는 이러한 값이 무시되고 배열에서는 null로 대체됩니다.
JSON.stringify(정의되지 않음)는 정의되지 않음을 반환합니다. 날짜는 인용된 ISO 날짜로 일련번호가 지정됩니다.
예:
코드:
var text = JSON.stringify(['e', {pluribus: 'unum'}]);
//텍스트는 '["e",{"pluribus":"unum"}]'입니다.
JSON.parse(텍스트, 필터)
이 메서드는 JSON 텍스트를 구문 분석하고 SyntaxError 예외가 발생할 수 있는 구성 요소 또는 배열을 생성합니다.
선택적 필터 매개변수는 결과를 필터링하고 변환하는 함수이며, 각 키와 값을 허용하며 해당 반환 값은 소스 값을 대체하는 데 사용됩니다. 수신된 값을 반환하면 결과는 변경되지 않습니다. 정의되지 않은 값을 반환하면 해당 멤버가 삭제됩니다.
예:
코드:
//텍스트를 구문 분석하고 키에 "date"라는 문자열이 포함되어 있으면 해당 값을 날짜로 변환합니다.
myData = JSON.parse(텍스트, 함수(키, 값) {
return key.indexOf('date') >= 0 ? new Date(value) : value;
});
위의 입문 튜토리얼에서는 json2.js 사용 방법에 대한 기본적인 이해를 제공했습니다. 여기서는 이 파일에 대해 자세히 설명하지 않겠습니다. 간단히 JSON 텍스트를 구문 분석하려는 경우 eval을 사용할 수 있습니다. () 함수는 JavaScript의 내장 함수입니다. 예를 들어 JSON.stringify의 경우 생성된 JSON 텍스트를 구문 분석하려면 다음
코드를 사용할 수 있습니다.
var myE = eval('["e",{"pluribus":"unum"}]');
myE 객체를 얻으려면.
JavaScript에서 JSON으로 직렬화 - 프로토타입.js 사용
여러분이 나와 같고 프로젝트에서 오픈 소스 JavaScript 프레임워크를 사용하고 싶다면 json2.js 파일 사용을 건너뛸 수 있습니다. 예를 들면 다음과 같습니다. 파일은 http://www.prototypejs.org 에서 다운로드할 수 있습니다. 이 기사는 JavaScript 프레임워크에 관한 것이 아니므로 여기에서는 이미 프로토타입.js 사용에 대해 어느 정도 이해하고 있다고 가정합니다.
프로토타입.js는 Object 개체에 대한 toJSON 메서드를 제공합니다. Object.toJSON() 메서드를 사용하여 개체를 직렬화할 수 있습니다. 예를 들면 다음과
같습니다.
var 고양이=
{
이름:"헬로키티",
높이:"사과 6개"
}
경고(Object.toJSON(cat));
//{"name": "hellokitty", "height": "6 apples"} 콘텐츠가 포함된 대화 상자가 나타납니다.
또한, Prototype.js에는 추가적인 JSON 지원이 있는데, 주로 Ajax 객체의 Ajax 반환 요청에 있는 JSON 콘텐츠를 구문 분석하는 것입니다. 해당 내용은 당분간 당사 콘텐츠와 관련이 없으며 다시 소개하지 않습니다.
PHP와 JSON
위에서 우리는 PHP에서 객체 직렬화 방법과 JavaScript에서 객체를 JSON으로 직렬화하는 방법에 대해 배웠습니다. 그러나 둘의 구문이 실제로 정확히 동일하지 않기 때문에 왜 두 가지를 합쳤는지 의문이 들 것입니다. PHP에서는 JSON 텍스트를 역직렬화하는 것이 가능하며, PHP 스타일 텍스트 대신 PHP 객체를 JSON으로 직렬화하는 것도 가능합니다. 이는 주로 json_decode 및 json_encode 두 함수에 의해 수행됩니다. 이 두 함수는 PHP 5 >= 5.2.0에서만 지원된다는 점에 유의해야 합니다. PHP4 환경에서 실행되는 프로그램을 작성하려면 이 두 함수를 사용하세요. 사용할 수 없습니다.
json_decode 함수
구문
혼합 json_decode ( string $json [, bool $assoc] )
JSON으로 인코딩된 텍스트를 가져와서 PHP 변수
매개변수
json
으로 변환합니다.
JSON으로 인코딩된 텍스트
협회
TRUE인 경우 반환 값은 개체
이거나
, 선택적 assoc 매개 변수가 TRUE인 경우json_encode 함수
구문
문자열 json_encode(혼합 $value)
가 반환됩니다.
이 함수는 값의 JSON 표현식
매개변수
값을
반환합니다.
인코딩할 값은 리소스를 제외한 모든 유형의 매개변수일 수 있습니다. 이 함수는 UTF-8 인코딩 형식에서만 작동합니다.
성공
시 인코딩된 JSON 텍스트를 반환합니다.
다음
두 예는 시나리오 중 하나를 기반으로 합니다. 즉, "객체 지향" 방식으로 작동하는 사용자 등록 모듈이 있다고 가정합니다. json_decode 함수 인스턴스에서 사용자 등록 정보를 전경에서 클래스 속성으로 변경한 다음 이를 배경으로 전달합니다. php 파일입니다(단순화를 위해 여기서는 Ajax를 사용하지 않습니다). json_encode 예제에서는 html 파일의 js 파일을 참조하고, 주소는 php 파일을 가리키고, json으로 인코딩된 사용자 개체를 php 파일에 출력합니다. (또한 단순화를 위해 정보를 가져오지 않고 직접 개체를 생성합니다. 데이터베이스), html로 출력됩니다.
좋습니다. 먼저 프런트 엔드 페이지인 json_encode.htm을 살펴보겠습니다. 이 페이지에는 일반적인 등록 페이지가 있습니다. 제출하면 JavaScript 함수가 트리거되고 사용자 개체가 생성되며 양식 콘텐츠가 생성됩니다. 사용자 개체로 설정되어 JSON 텍스트를 생성하고 POST 모드에서 배경 json_encode.php 파일에 전달합니다. js_encode.php 파일에서 json_decode 함수를 사용하여 JSON 텍스트를 PHP 객체로 구문 분석하고 출력합니다.
자, 먼저 json_encode.html 파일을 살펴보겠습니다. 파일 코드는 다음과 같습니다
.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<머리>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>json_decode</title>
<script src="json2.js" type="text/javascript"></script>
<스크립트 유형="텍스트/자바스크립트">
함수 JSON_test(o){
var 사용자 = {
이름:document.getElementById('txt_name').value,
이메일:document.getElementById('txt_email').value,
비밀번호:document.getElementById('txt_name').value
}
var json_string = JSON.stringify(user);
document.getElementById('txt_json').value=json_string;
Alert("양식을 제출하려면 확인을 클릭하세요.");
o.제출();
}
</script>
</head>
<본문>
<form id="form1" name="form1" method="post" action="json_encode.php" onsubmit="JSON_test(this)">
<label for="txt_name">이름</label>
<p>
<input type="text" name="txt_name" id="txt_name" />
</p>
<label for="txt_email">이메일</label>
<p>
<input type="text" name="txt_email" id="txt_email" />
</p>
<p>
<label for="txt_password">비밀번호</label>
</p>
<p>
<input type="text" name="txt_password" id="txt_password" />
</p>
<p>
<input type="text" name="txt_json" id="txt_json" />
<label for="버튼"></label>
<input type="submit" name="button" id="button" value="JSON" />
</p>
</form>
</body>
</html>
양식이 제출되면 JavaScript 함수 JSON_text()가 트리거됩니다. 이 함수는 먼저 JavaScript 개체 사용자를 생성하고 이름, 이메일 및 비밀번호 속성을 해당 양식의 값으로 설정한 다음 JSON.stringify를 사용합니다. json2.js 파일의 메서드를 JSON 텍스트 json_string으로 변환하고 마지막으로 숨겨진 필드가 설정됩니다(여기서 명확하게 하기 위해 이 숨겨진 필드를 텍스트 상자 형식으로 표시합니다). txt_json의 값은 json_string입니다. 그리고 양식이 제출됩니다.
다음으로 다음과 같이 json_encode.php 파일로 이동합니다.
코드:
<?php
$json_string = $_POST["txt_json"];
if(ini_get("magic_quotes_gpc")=="1")
{
$json_string=stripslashes($json_string);
}
$user = json_decode($json_string);
echo var_dump($user);
?>
이 파일에서는 먼저 json_encode.html 파일에서 POST 양식 필드 txt_json의 값을 가져와 $json_string 변수에 넣은 다음 현재 PHP 설정이 Magic_quotes_gpc=On, 즉 들어오는 큰따옴표인지 판단합니다. 의미로 변환되므로 json_decode 함수가 이를 구문 분석할 수 없으므로 이스케이프를 해제해야 합니다. 그런 다음 json_decode 함수를 사용하여 JSON 텍스트를 객체로 변환하고 이를 $user 변수에 저장한 후 마지막으로 echo var_dump($user)를 사용하여 객체를 덤프합니다
.
객체(stdClass)#1 (3) {
["이름"]=>
문자열(10) "한궈펑"
["이메일"]=>
문자열(18) " [email protected] "
["비밀번호"]=>
문자열(10) "한궈펑"
}
json_encode 함수 인스턴스는
여전히 json_enode.html과 json_encode.php라는 두 부분으로 구성되어 있습니다. json_decode.html 파일의 형태는 기본적으로 json_decode.html 파일과 유사하지만, 차이점은 이번에는 json_encode.php 파일에서 해당 사용자의 JSON 텍스트를 가져오려고 한다는 점입니다. 첫 번째:
코드:
<?php
클래스 사용자{
공개 $이름="";
공개 $email="";
공개 $password="";
};
$myUser = 새로운 사용자;
$myUser->name="hanguofeng";
$myUser->email=" [email protected] ";
$myUser->password="hanguofeng";
$json_string = json_encode($myUser);
?>
var 사용자 = <?php echo($json_string)?>;
이 파일은 먼저 user 클래스를 생성한 다음 myUser 사용자 클래스의 인스턴스를 얻고 해당 사용자 이름, 이메일 및 비밀번호를 설정합니다. 그런 다음 json_encode 함수를 사용하여 이를 JSON 텍스트로 변환하고 $json_string 변수에 저장합니다. JavaScript에서 전역 변수 user를 생성하기 위한 JavaScript 코드 조각을 출력합니다.
다음으로, json_encode.php 파일을 json_encode.html 파일에 도입하고 다음과 같이 사용자 개체의 다양한 속성을 가져와야 합니다.
코드:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<머리>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>json_encode</title>
<script src="json_encode.php" type="text/javascript"></script>
</head>
<본문>
<form id="form1" name="form1" 메서드="게시물">
<label for="txt_name">이름</label>
<p>
<input type="text" name="txt_name" id="txt_name" />
</p>
<label for="txt_email">이메일</label>
<p>
<input type="text" name="txt_email" id="txt_email" />
</p>
<p>
<label for="txt_password">비밀번호</label>
</p>
<p>
<input type="text" name="txt_password" id="txt_password" />
</p>
</form>
<스크립트 유형="텍스트/자바스크립트" >
document.getElementById('txt_name').value=user.name;
document.getElementById('txt_email').value=user.email;
document.getElementById('txt_password').value=user.password;
</script>
</body>
</html>
이 파일에서 두 가지 점에 주의해야 합니다. 첫 번째는 json_encode.php 파일을 다음 코드와 함께 JavaScript 파일로 소개한다는 것입니다
.
<script src="json_encode.php" type="text/javascript"></script>
두 번째 요점은 다음과 같습니다.
텍스트 상자 코드 뒤에 JavaScript 코드를 추가하고, 텍스트 상자의 value 속성을 연산하고, 해당 값을 사용자 개체의 해당 값으로 설정합니다.