JSON 미스터리
PHP 및 Javascript의 JSON 초보자 가이드에 오신 것을 환영합니다. 프로그래밍을 시작했을 때 인터넷 어디에서나 이 "JSON"에 대해 들어 봤습니까? 일반 용어의 JSON은 다른 엔티티간에 데이터를 교환하는 데 사용되는 특정 형식의 문자열입니다. 예를 들어, Javascript에서 PHP로 배열을 전달하거나 두 서버간에 데이터를 교환합니다.
그러나 JSON 데이터 형식은 무엇입니까? 무엇을 하고 어떻게 사용합니까? 우리는 이 모든 신비를 단계별로 이 안내서의 예제와 함께 논의 할 것입니다. 알아 보려면 계속 읽으십시오!
ⓘ이 자습서 마지막 부분에 모든 예제 코드가 포함 된 zip 파일이 포함되어 있으므로 모든 내용을 복사하여 붙여 넣을 필요가 없습니다.
소스 코드 다운로드
먼저 약속 된 예제 소스 코드에 대한 다운로드 링크가 있습니다.
소스 코드 다운로드
소스 코드를 다운로드하려면 여기를 클릭하십시오. MIT 라이센스에 따라 릴리스되었으므로 그 위에 빌드하거나 자신의 프로젝트에서 자유롭게 사용하십시오.
빠른 시작
기본
코드 예제로 들어가기 전에 몇 가지 기본 사항부터 시작하겠습니다. JSON이 무엇인지, JSON이 무엇이며, 왜 필요한가?
JSON이란 무엇입니까?
JSON은 Javascript Object Notation의 약자이며 데이터를 저장하고 교환하도록 설계된 데이터 구문입니다 (XML과 매우 유사).
이름에서 알 수 있듯이 JSON은 실제로 Javascript로 객체와 배열을 정의하는 속기 시작했습니다. 그러나 그 이후로 많은 인기를 얻었으며 현재 데이터 교환을 위한 플랫폼 독립적 인 사실상의 표준으로 발전했습니다.
JSON 객체의 신택스 및 예
일반적으로 JSON 객체를 정의하는 방법은 다음과 같습니다.
JSON 배열의 예
단순한 값 배열 만 원하는 경우 어떻게 합니까?
JSON은 무엇을 위해 사용되며 왜 중요합니까?
이 시점에서 기본적인 JSON 이해가 필요하지만 실제로 어떻게 사용하는지에 대해 매우 혼란스러울 것입니다. 여기 JSON의 이야기와 예제 사용법이 있습니다.
한때 인터넷의 어두운 시대에 한 서버에서 다른 서버로 데이터를 보내려는 경우 아마도 XML 형식 (HTML과 같은 확장 가능한 마크 업 언어) 일 것입니다.
어떤 회사에는 직원의 세부 정보를 보유하는 시스템과 임금을 수행하는 시스템의 두 가지 시스템이 있다고 가정 해 봅시다. 따라서 임금 시스템이 급여 명세서를 생성하려고 할 때 직원 시스템에 개인 정보를 요청합니다. 그런 다음 직원 시스템은 다음 형식으로 임금 시스템에 데이터를 다시 보냅니다.
<person> <name>John Doe</name> <email>john@doe.com</email> <phone>123-456-789</phone> <address>123 Doge Lover Street</address> <hobbies> <hobby><name>sleeping</name></hobby> <hobby><name>eating</name></hobby> <hobby><name>stoning</name></hobby> </hobbies> </person>
그렇다면 왜 여기서 XML을 사용하지 않고 JSON과 관련이 있습니까? 스마트 코딩 원숭이는 곧 XML이 비효율적이라는 것을 깨달았고 대신 JSON을 사용하기로 결정했습니다.
{ "name" : "John Doe", "email" : "john@doe.com", "phone" : "123-456-789", "address" : "123 Doge Lover Street", "hobbies" : ["sleeping", "eating", "stoning"] }
한 번 살펴보면 사람들이 왜 데이터 전송에 JSON을 사용하도록 전환했는지 알 수 있을 것입니다. "전통적인"XML은 JSON과 비교할 때 상당히 많은 오버 헤드 (무용 한 데이터)를 추가합니다.
참고로, 위의 XML은 299 바이트이고 JSON은 174 바이트입니다. 둘 다 동일한 데이터 집합을 전달합니다.
매일 수천 개의 항목을 처리하는 대규모 시스템의 경우 JSON 형식으로 전환하면 많은 시스템 리소스가 절약됩니다. 그렇기 때문에 JSON이 널리 사용되는 이유는 서버 간 통신에만 사용되는 것이 아닙니다. 일반적으로 Javascript에서 서버로 데이터를 전달하는 데 사용되고 파일에 저장되어 일부 정보를 포함하는 것을 볼 수 있습니다.
JSON IN PHP
이제 JSON의 기본 원리가 어떻게 작동하는지에 대한 아이디어를 얻었으므로 PHP에서 JSON을 사용하는 방법의 실제 예를 살펴 보겠습니다.
JSON은 단지 STRING입니다
더 진행하기 전에 여전히 혼란스러워하는 사람들을 위한 작은 알림이 있습니다. –JSON은 단지 문자열이며 데이터 형식을 지정하는 구문입니다. 다음은 PHP에서 "JSON을 정의하는 방법"입니다.
// Look carefully, this is just a regular Joe string! $person = '{"name"=>"John Doe", "email"=>"john@doe.com"}'; echo "This IS a string - " . $person;
어떤 사람들은 너무 많이 생각하기를 좋아합니다. 그리고 JSON은 인코딩과 디코딩이라는 두 가지 사실만으로도 매우 간단합니다.
PHP JSON ENCODE – JSON 문자열로 배열 변환
예를 들어, 다음은 PHP json_encode 함수를 사용하여 배열을 JSON 문자열로 바꾸어 나중에 사용할 수 있도록 파일에 저장하는 방법입니다.
// THE DATA ARRAY $data = [ "name" => "John Doe", "email" => "john@doe.com", "hobbies" => ["sleeping", "eating", "stoning"] ]; // JSON_ENCODE WILL TURN THE ARRAY INTO A JSON STRING $data = json_encode($data); echo "JSON encoded string - " . $data; // WRITE JSON STRING TO FILE $stream = fopen("data.json", 'w') or die("Error opening file"); fwrite($stream, $data); fclose($stream);
PHP JSON DECODE – JSON 문자열을 배열로 변환
위에서 저장된 JSON 파일에 이어 PHP json_decode 함수를 사용하여 배열을 다시 가져올 수 있습니다.
// READ JSON STRING FROM FILE $data = file_get_contents('data.json'); // JSON DECODE - TURN JSON STRING BACK TO ARRAY $data = json_decode($data, true); // LOOP THROUGH PHP ARRAY OR OBJECT foreach ($data as $k=>$v) { echo "<strong>KEY</strong>: $k | <strong>VALUE</strong>: "; print_r($v); echo "<br>"; }
JSON IN JAVASCRIPT
그것은 PHP에서 케이크 한 조각이었습니다. 고맙게도, Javascript에서와 마찬가지로, 당신은 단지 같은 오래된 인코딩과 디코딩을 알아야 합니다…
JSON STRINGIFY-변환 변환
JSON 인코딩이라고 부르는 대신, 자바 스크립트로 JSON stringify를 사용합니다… 배열이나 객체를 문자열로 변환하고 있기 때문에 그것을 얻습니까?
<html> <head> <title>JSON Encode Example</title> <script> window.addEventListener("load", function(){ var data = { "name" : "John Doe", "email" : "john@doe.com", "hobbies" : ["sleeping", "eating", "stoning"] }; data = JSON.stringify(data); document.getElementById("wrapper").innerHTML = data; }); </script> </head> <body> <div id="wrapper"></div> </body> </html>
JSON 구문 분석 – JSON 문자열을 배열 / 목적으로 변환
JSON 문자열을 객체 / 배열로 다시 디코딩 할 수도 있지만 Javascript에서는 JSON 구문 분석이라고 합니다.
<html> <head> <title>JSON Decode Example</title> <script> window.addEventListener("load", function(){ // RAW JSON STRING TO ARRAY var data = document.getElementById("wrapper").innerHTML; data = JSON.parse(data); console.log(data); // LOOP THROUGH ARRAY var html = ""; for (var key in data) { html += "<strong>KEY: </strong>"; html += key; html += " | <strong>VALUE: </strong>"; html += data[key]; html += "<br>"; } document.getElementById("wrapperP").innerHTML = html; }); </script> </head> <body> <h1>JSON STRING:</h1> <div id="wrapper"> {"name":"John Doe","email":"john@doe.com","hobbies":["sleeping","eating","stoning"]} </div> <h1>PROCESSED:</h1> <div id="wrapperP"></div> </body> </html>
고지 된 무언가?
Javascript에서 배열과 객체를 정의하는 방법을 기억하십니까?
// PERSON OBJECT var person = { name : "John Doe", email : "john@doe.com" }; // FRUITS ARRAY var fruits = ["Apple", "Orange", "Cherimoya", "Feijoa"];
이것들이 당신에게 익숙하지 않습니까? 예, 정확히 JSON 구문입니다 ... 이번에 눈치 채지 못한 경우가 있습니다.
JSON IN AJAX
PHP와 Javascript 모두에서 새로 발견 된 JSON 기능을 사용하면 예제의 절정에 도달 할 수 있습니다.
JSON을 사용하여 Javascript와 PHP간에 통신하는 방법은 무엇입니까? JSON을 사용할 수 있는 방법은 여러 가지가 있지만 여기서는 두 가지 간단한 방법을 살펴 보겠습니다.
데이터 처리 – PHP 배열에서 JAVASCRIPT로
JSON의 가장 일반적인 사용법 중 하나는 서버에서 데이터를 가져 오는 것입니다. 클라이언트 측에서는 일반적으로 데이터를 얻기 위해 서버 측에 AJAX 요청을 발생 시킵니다.
<html> <head> <title>JSON Fetch Data Example</title> <script> window.addEventListener("load", function () { // FETCH DATA FROM SERVER VIA AJAX var xhr = new XMLHttpRequest(); xhr.open('POST', "4b-fetch-data.php", true); xhr.onload = function () { // WE PARSE THE JSON RESPONSE FROM THE SERVER var data = JSON.parse(this.response); console.log(data); // THEN USE THE DATA var html = ""; for (var key in data) { html += "<strong>" + data[key] + "</strong><br>"; } document.getElementById("container").innerHTML = html; }; xhr.send(); }); </script> </head> <body> <div id="container"></div> </body> </html>
그런 다음 서버 측에서 JSON 문자열로 응답하여 AJAX 요청을 처리합니다.
// LET'S SAY THAT WE HAVE EXTRACTED SOME DATA FROM THE DATABASE $data = [ "Actual Advice Mallard", "Keyboard Cate", "Confession Bear", "Sneezing Panda", "Fabulous Llama", "Evil Plotting Raccoon" ]; // THEN WE OUTPUT IT IN A JSON STRING echo json_encode($data);
데이터 제출 – JAVASCRIPT ARRAY에서 PHP로
이것은 약간 더 발전된 예입니다. 사용자의 이름, 이메일, 주소 및 전화 번호를 수집하는 사용자 등록 양식이 있다고 가정하겠습니다.
<html> <head> <title>JSON Encode Data Example</title> </head> <body> <form method="post" target="_blank" action="4d-encode-data.php"> Name: <input type="text" name="name" required value="John Doe"/> <br> Email: <input type="text" name="email" required value="john@doe.com"/> <br> Address: <input type="text" name="address" required value="123 Doge Street"/> <br> Telephone: <input type="text" name="tel" required value="123-456-789"/> <br> <input type="submit" value="Go"/> </form> </body> </html>
일반적으로 양식을 제출할 때 모든 것을 데이터베이스에 저장합니다. 그러나 이 경우 주소와 전화 번호가 좀 더 민감하기 때문에 주소와 전화 번호를 보호하고 싶다고 가정 해 보겠습니다.이를 JSON 문자열에 넣고 암호화 할 수 있습니다.
// SERVER-SIDE WILL RECEIEVE THE DATA echo "Server-side has receieved: <br>"; print_r($_POST); echo "<br></br>"; // JSON ENCODE THE DATA THAT YOU WANT TO PROTECT echo "Address + Tel will go into a JSON String: <br>"; $protect = json_encode([ "address" => $_POST['address'], "tel" => $_POST['tel'] ]); echo $protect; echo "<br></br>"; // ENCRYPT & SAVE INTO DATABASE echo "Encrypted: <br>"; define ("SECRETKEY", "mysecretkey1234"); $protect = openssl_encrypt($protect, "AES-128-ECB", SECRETKEY); echo $protect; echo "<br></br>"; // YOU CAN DECRYPT AND REUSE THE JSON ARRAY IN THE FUTURE echo "Decrypted: <br>"; $clear = openssl_decrypt($protect, "AES-128-ECB", SECRETKEY); $clear = json_decode($clear, true); print_r($clear);
JSON IN PHP-PHP
예제의 이 마지막 섹션에서는 한 서버에서 다른 서버로 JSON 인코딩 문자열을 전송하는 방법 (서버 간 대화)을 살펴 보겠습니다.
서버에서 서버로 JSON 교환
첫 번째 서버에서 배열을 정의하여 시작합니다. 그런 다음 평소처럼 JSON 문자열로 인코딩하십시오. 마지막으로 curl을 사용하여 이 JSON 문자열을 두 번째 서버로 전달합니다.
// THE USER ARRAY $user = [ "name" => "John Doe", "email" => "john@doe.com" ]; // JSON ENCODING $json = "data=" . json_encode($user); // CURL CONNECT WITH ANOTHER SERVER // But we don't have other server, so we point to our own for testing $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://localhost/test/5b-server-b.php"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $json); $result = curl_exec($ch); curl_close($ch); echo $result;
두 번째 서버에서는 POST 데이터 만 수신하고 처리해야 합니다.“일반적인”HTML POST 요청을 처리하는 것과 매우 유사합니다.
// DATA RECEIEVED echo "This is receieved on the other server - "; print_r($_POST['data']); echo "<br>"; // JSON DECODE $data = json_decode($_POST['data'], true); echo "After decoding the data - "; print_r($data);
유용한 비트
이것이 모든 코드에 대한 것입니다. 여기에 유용한 작은 요약이 있습니다.
요약
Function | Description |
json_encode | Turns an object or array into a JSON encoded string. |
json_decode | Convert a JSON encoded string back into an object or array. |
Function | Description |
JSON.stringify | Encodes an object or array into a JSON string. |
JSON.parse | Decodes a JSON string, and turn it back into an object/array. |
필요한 경우 공식 문서 및 참조 사항은 다음과 같습니다.
THE FLOW
Direction | Steps |
Passing a PHP array to Javascript |
|
Passing a Javascript array to PHP |
|
Server to Server |
|
등록된 댓글이 없습니다.