JSON 형식: 예시 및 설명 JSON 형식: 데이터 생성, PHP 및 JS Json 약어 디코딩과 함께 사용

) 및 서버 자체 간(HTTP 소프트웨어 인터페이스). JSON 형식은 관계형 데이터베이스나 파일 캐시에 복잡한 동적 구조를 저장하는 데에도 적합합니다.

JSON은 JavaScript 구문의 하위 집합이므로 내장된 eval() 함수를 사용하여 신속하게 역직렬화할 수 있습니다. 또한 완전한 기능을 갖춘 JavaScript 함수를 삽입하는 것도 가능합니다. PHP 버전 5.2.0부터 JSON 지원은 json_decode() 및 json_encode() 함수 형태로 핵심에 포함되어 있으며, 이 함수는 자체적으로 JSON 데이터 유형을 해당 PHP 유형으로 변환하거나 그 반대로 변환합니다.

통사론

JSON은 두 가지 구조로 구축됩니다.

  • 키/값 쌍의 집합입니다. 다양한 언어에서 이는 다음과 같이 구현됩니다. 객체, 레코드 , 구조 , 사전 , 해시 테이블 , 키 목록 또는 연관 배열 . 키는 문자열만 가능하고 값은 모든 형식만 가능합니다.
  • 번호가 매겨진 값 집합입니다. 많은 언어에서 이것은 다음과 같이 구현됩니다. 정렬, 벡터, 목록 또는 시퀀스.

이것은 보편적인 데이터 구조입니다. 이론적으로 모든 현대 프로그래밍 언어는 어떤 형태로든 이를 지원합니다. JSON은 서로 다른 프로그래밍 언어 간에 데이터를 교환하는 데 사용되므로 이러한 구조를 기반으로 JSON을 구축하는 것이 합리적입니다.

JSON에서는 다음 형식이 사용됩니다.

  • 객체는 중괄호( )로 묶인 이름/값 쌍의 순서가 지정되지 않은 집합입니다. 이름과 값 사이에 기호가 있습니다. ": " , 이름/값 쌍은 쉼표로 구분됩니다.
  • 배열(1차원)은 일련번호(인덱스)를 갖는 값의 집합입니다. 배열은 대괄호로 묶여 있습니다. 값은 쉼표로 구분됩니다.
  • 값은 다음과 같습니다. 큰따옴표 안에, 숫자, 값 진실또는 거짓, 물체, 정렬또는 값 없는. 이러한 구조는 서로 중첩될 수 있습니다.
  • 문자열은 백슬래시 이스케이프 시퀀스를 사용하여 큰따옴표로 묶인 0개 이상의 유니코드 문자로 구성된 순서 집합입니다. 문자는 간단한 문자열로 표시됩니다.
  • 이름은 문자열입니다.

언어 및 Java의 문자열과 매우 유사합니다. 숫자또한 10진수 형식만 사용된다는 점을 제외하면 C 또는 Java 숫자와 매우 유사합니다. 두 문자 사이에 공백을 삽입할 수 있습니다.

다음 예에서는 사람을 설명하는 객체의 JSON 표현을 보여줍니다. 객체는 이름과 성 필드, 주소를 설명하는 객체, 전화번호 목록이 포함된 배열입니다.

( "firstName" : "Ivan" , "lastName" : "Ivanov" , "address" : ( "streetAddress" : "Moskovskoe sh., 101, apt. 101" , "city" : "Leningrad" , "postalCode" : 101101 ) , "phoneNumbers" : [ "812 123-1234" , "916 123-4567" ] )

XML에서 이러한 구조는 다음과 같습니다.

Ivan Ivanov Moskovskoe sh., 101, 아파트 101 Leningrad 101101 812 123-1234 916 123-4567

812 123-1234 916 123-4567

YAML과의 비교

기능적으로나 구문적으로 JSON은 YAML 언어의 하위 집합입니다. 특히 YAML 1.2 사양에는 "모든 JSON 파일은 유효한 YAML 파일입니다."라고 명시되어 있습니다. 가장 일반적인 YAML 파서는 JSON도 처리할 수 있습니다. 버전 1.2 이전의 YAML 사양은 주로 YAML에서 UTF-32에 대한 기본 지원이 부족하고 쉼표 구분 기호 뒤에 공백이 필요하기 때문에 JSON을 완전히 포함하지 않았습니다. 또한 JSON 사양에는 /* */ 스타일 주석이 포함되어 있습니다.

YAML의 가장 중요한 차이점은 JSON에 유사점이 없는 구문 확장 세트입니다.

관계형: YAML은 관계형 데이터를 지원합니다. YAML 문서에서는 파일/스트림에서 이전에 발생한 앵커를 참조할 수 있습니다. 재귀구조는 이런 식으로 표현될 수 있다. 확장 가능: YAML은 기본 형식(예: 문자열, 숫자, 부울) 이상의 확장 가능한 데이터 유형을 지원합니다. 블록: YAML에서는 들여쓰기된 블록 구문을 사용할 수 있습니다. 불필요한 기호(모든 종류의 대괄호, 따옴표 등)를 사용하지 않고 구조화된 데이터를 설명할 수 있습니다.

JSON 스키마

JSON 스키마는 JSON 문서의 구조를 기술하는 언어 중 하나입니다. JSON 구문을 사용합니다. XML 스키마, RelaxNG, Kwalify의 개념을 기반으로 합니다. JSON 스키마는 자기 설명적 언어입니다. 사용하면 동일한 직렬화/역직렬화 도구를 사용하여 데이터를 처리하고 유효성을 설명할 수 있습니다.

Ajax에서 JSON 사용하기

다음 예제 Javascript 코드는 브라우저가 XMLHttpRequest를 사용하여 서버에서 JSON 형식 개체를 요청하는 방법을 보여줍니다(프로그램의 서버 측은 생략되었습니다. 요청에 대한 응답으로 데이터를 JSON 문자열로 보내는 코드가 포함되어야 함). URL).

Var the_object; var http_request = new XMLHttpRequest() ; http_request.open("GET", url, true); http_request.send(null); http_request.onreadystatechange = function () ( if ( http_request.readyState == 4 ) ( if ( http_request.status == 200 ) ( the_object = JSON.parse ( http_request.responseText ) ; ) else ( 경고( "다음에 문제가 있습니다. URL." ) ; ) http_request = null ; ) ) ;

XMLHttpRequest를 사용하는 이 예제는 모든 브라우저에 보편적이지 않습니다(Internet Explorer, Opera, Safari 및 Mozilla 기반 브라우저의 경우 코드에 약간의 차이가 있음). XMLHttpRequest의 사용은 동일한 출처 정책으로 인해 제한됩니다. 요청에 대한 응답의 URL은 응답을 요청하는 페이지가 있는 서버와 동일한 DNS 도메인에 있어야 합니다. 대안은 클라이언트와 서버 간에 전달되는 인코딩된 함수 호출을 사용하여 클라이언트가 제3자 도메인에서 JSON 인코딩 데이터를 로드하고 호출자에게 완료를 알릴 수 있도록 하는 JSONP 접근 방식입니다. 추가 서버 요구 사항.

또는 페이지 코드에서 요소를 사용하여 JSON 데이터를 비동기식으로 요청하거나 간단히 . 이러한 접근 방식은 XMLHttpRequest가 광범위하게 지원되기 전에는 일반적이었습니다.

동일한 원본 정책을 사용하여 동적 태그를 사용하여 JSON 데이터를 전송할 수도 있지만 이로 인해 코드가 취약해집니다. 보다 안전한 대안으로 다음을 사용하는 것이 제안되었습니다. JSONRequest.

보안 질문

JSON은 직렬화된 형식으로 데이터를 전송하도록 설계되었지만 구문은 JavaScript 구문을 따르므로 여러 가지 보안 문제가 발생합니다. JSON 형식의 외부 소스로부터 수신된 데이터를 처리하기 위해 사전 검증 없이 eval() 함수가 적용되는 경우가 많습니다.

자바스크립트 평가()

JSON은 구문적으로 올바른 JavaScript 코드 조각으로 나타나기 때문에 JavaScript 프로그램에서 JSON 데이터를 구문 분석하는 가장 간단한 방법은 JavaScript 표현식을 실행하도록 설계된 내장 JavaScript eval() 함수를 사용하는 것입니다. 이 접근 방식을 사용하면 추가 파서를 사용할 필요가 없습니다.

eval() 기술은 사용된 JSON 데이터의 소스를 신뢰할 수 없는 경우 시스템을 취약하게 만듭니다( 영어). 이러한 데이터는 코드 삽입 공격을 위한 악성 JavaScript 코드일 수 있습니다( 영어). 이 취약점을 이용하면 데이터 탈취, 인증 위조가 가능하다. 그러나 추가적인 데이터 검증 도구를 사용하면 취약점을 제거할 수 있습니다. 예를 들어 eval()을 실행하기 전에 정규식을 사용하여 외부 소스로부터 수신된 데이터의 유효성을 검사할 수 있습니다. JSON을 정의하는 RFC에서는 다음 코드를 사용하여 JSON 형식을 준수하는지 확인하도록 제안합니다.

Var my_JSON_object = ! (/[^,:()\[\]0-9.\-+Eaeflnr-u \n\r\t]/ .test ( text.replace (/"(\\.|[^"\\] )*"/g , "" ) ) ) && eval("(" + text + ")" ) ;

eval()에 대한 보다 안전한 대안으로 JSON 데이터만 처리할 수 있는 새로운 함수인parseJSON()이 제안되었습니다. 이는 ECMAScript 표준 버전 4에 도입되었으며 "JSON: A Low-Fat Alternative to XML" 기사에 설명되어 있습니다. 현재 JavaScript 라이브러리로 제공되며 ECMAScript 제5판에 포함될 예정입니다.

내장된 JSON

최신 버전의 웹 브라우저에는 JSON에 대한 지원이 내장되어 있으며 설명된 문제로 이어지는 eval() 함수를 호출하지 않고도 JSON을 처리할 수 있습니다. 이 경우 일반적으로 JSON 처리가 더 빠릅니다. 따라서 2009년 6월에 다음 브라우저에는 JSON 지원이 내장되었습니다.

가능한 경우 최소 5개의 인기 있는 JavaScript 라이브러리가 인라인 JSON을 사용합니다.

도메인 간 요청 위조

JSON을 제대로 사용하지 않으면 사이트가 교차 사이트 요청 위조(CSRF 또는 XSRF)에 취약해집니다. 태그를 사용하면 해당 태그를 사용하는 리소스와 동일한 도메인에 속하지 않은 소스를 사용할 수 있으므로 임의의 페이지 컨텍스트에서 JSON 데이터를 가장하여 코드가 실행될 수 있어 비밀번호를 손상시키거나 다른 사이트에 접속하도록 승인된 사용자의 기타 민감한 정보.

이는 JSON 데이터에 제3자에 의해 손상될 수 있는 민감한 정보가 포함되어 있고 서버가 단일 원본 정책( 영어), 외부 요청이 감지되면 데이터에 대한 액세스를 차단합니다. 서버가 요청의 유효성을 확인하고 올바른 경우에만 데이터를 제공하는 경우에는 문제가 되지 않습니다. 이를 확인하는 데 HTTP 쿠키를 사용할 수 없습니다. HTTP 쿠키의 독점적 사용은 교차 사이트 요청 위조에 사용됩니다.

JSONP 및 JSONPP

JSONP(JSON Padding) 또는 "JSON with padding"은 콜백 함수 이름을 입력 인수로 지정한 경우 JSON을 확장한 것입니다.

이 기술은 브라우저의 보안 정책에 따라 태그를 사용하여 페이지가 로드된 서버가 아닌 다른 서버에 액세스할 수 있다는 사실에 기초합니다.

JSONP 기술을 사용하지 않으면(즉, JSON 데이터 인코딩만 사용) 서버는 데이터만 반환할 수 있습니다. 예를 들면 다음과 같습니다.

("용지": "A4", "개수": 5)

그러나 이는 데이터일 뿐이며 브라우저에 영향을 미칠 수 없습니다.

JSONP 기술을 사용하면 콜백 함수의 이름이 호출 라인(GET)을 통해 타사 서버에 전달됩니다.

여기서 jsonp 매개변수에는 콜백 함수인 parseResponse의 이름이 포함되어 있습니다.

이제 외부 서버 example.com은 다음 코드를 반환할 수 있습니다.

ParseResponse(( "paper" : "A4" , "count" : 5 ) )

이제 코드는 첫 번째 도메인의 javascript 함수를 호출합니다.

이 아이디어는 원래 2005년 MacPython 블로그에서 제안되었으며 현재 Dojo Toolkit 애플리케이션, Google Toolkit 애플리케이션 및 zanox 웹 서비스와 같은 많은 Web 2.0 애플리케이션에서 사용됩니다. S3DB 웹 서비스에 대한 JSONPP 지원과 같은 추가 인수를 포함하기 위해 이 프로토콜에 대한 추가 확장이 제안되었습니다.

JSONP는 스크립트 태그를 사용하기 때문에 호출은 본질적으로 전 세계에 공개됩니다. 이러한 이유로 JSONP는 민감한 데이터를 저장하는 데 부적절할 수 있습니다.

원격 사이트에서 스크립트 태그를 활성화하면 사이트의 모든 콘텐츠를 전송할 수 있습니다. 원격 사이트에 Javascript 삽입을 허용하는 취약점이 있는 경우 원본 사이트도 해당 취약점으로 인해 영향을 받을 수 있습니다.

JSONPP(패딩이 포함된 매개변수화된 JSON) 패딩이 포함된 매개변수화된 JSON - JSONP 아이디어 개발

JSONPP에는 소스 URL, JSON 데이터를 처리할 함수 이름, 데이터 수신 후 평가 라인, 데이터 처리 완료 후 평가 라인이 포함되어 있습니다.

JSON_call(SRC, JSONP, JSONPP, ONLOAD) ;

결국 돌아서다

Ans = JSONP(SRC) ( eval(JSONPP(ans) ) ; eval(ONLOAD) ; )

일반적으로 JSONPP 아이디어 자체에는 매개변수의 개수가 중요하지 않습니다. SRC, JSONP, JSONPP(및 서버 측 처리와 클라이언트 측 처리)는 JSONPP가 되기에 충분합니다.

S3DB 서비스 작업의 예를 살펴보겠습니다.

함수 s3db_jsonpp_call(src, next_eval) ( var call = "call_" + Math .random () .toString () .replace (/\./g, "" ) ; var headID = document.getElementsByTagName ("head" ) [ 0 ] ; var script = document.createElement ("script" ) ; script.id = call; script.type = "text/javascript" ; // 패딩되고 매개변수화된 json 사용 src = src+ "&format=json&jsonp=s3db_jsonpp&jsonpp=" + next_eval+ "&onload=remove_element_by_id("" + script.id + "")" ; script.src = src; headID.appendChild (script) ; // 답변 검색 ) function s3db_jsonpp(ans, jsonpp) ( eval(jsonpp) ; return ans ; ) 함수 Remove_element_by_id(id) ( var e = document.getElementById (id) ; e.parentNode .removeChild (e) ; return false ; )

예제에서 s3db_jsonpp_call() 함수는 DOM의 헤드 부분에 스크립트 요소를 생성합니다. 이 요소의 src는 JSONPP 호출에 해당합니다.

서버로부터 응답을 받은 후 s3db_jsonpp()가 호출됩니다. 이는 JSONP 규칙에 따라 호출 매개변수로 전달됩니다.

s3db_jsonpp() 내부에서 eval(jsonpp)이 실행되고 ans 값을 반환합니다.

eval(onload)를 호출하면 헤드에 생성된 스크립트의 ID가 있는 Remove_element_by_id()가 실행되고 결국 삭제됩니다. 예제의 ID는 스크립트의 맨 처음에 무작위로 생성되었기 때문에 어쨌든 사용되지 않기 때문입니다. s3db_jsonpp_call() 함수. 이 호출은 서버 응답에 있습니다.

객체 참조

JSON 표준은 객체 참조를 지원하지 않지만 Dojo Toolkit은 표준 JSON이 추가 규칙을 사용하여 이러한 참조를 지원할 수 있는 방법을 보여줍니다. 특히, dojox.json.ref 모듈은 순환 링크, 다중 링크, 문서 간 링크, 지연 링크를 포함한 여러 형태의 링크에 대한 지원을 제공합니다.

참고 사항도 참조하세요.
  • YAML은 마크업 언어가 아닙니다(YAML™) 버전 1.2(영어) . - 작업 초안 2008-05-11.(접근할 수 없는 링크 - 이야기) 2009년 9월 24일에 확인함.
  • . RedHanded(2005년 4월 7일). 2012년 9월 25일에 확인함.
  • JSON.Com JSON 스키마 제안(액세스할 수 없는 링크 - 이야기)
  • RFC 4627
  • JSON: XML의 Fat Free 대안. 보관됨
  • json2.js(영어) . 2012년 2월 12일에 원본 문서에서 보존된 문서. 2009년 9월 24일에 확인함.
  • 내장된 JSON을 사용합니다.
  • IE8에 JSON을 내장했습니다. 2012년 2월 12일에 원본 문서에서 보존된 문서.
  • Opera Presto 2.5(영어)(2010년 3월 10일)에서 지원되는 웹 사양입니다. 2012년 2월 12일에 원본 문서에서 보존된 문서. 2010년 3월 29일에 확인함.
  • JSON 객체의 ES 3.1 구현.
  • 티켓 #4429lang=en . 2012년 2월 12일에 원본 문서에서 보존된 문서.
  • 티켓 #4429(2009년 5월 22일). 2012년 2월 12일에 원본 문서에서 보존된 문서. 2009년 7월 3일에 확인함.
  • 티켓 #8111lang=ko . 2012년 2월 12일에 원본 문서에서 보존된 문서.
  • MooTools 코어 및 기타 1.3.1. 2012년 2월 12일에 원본 문서에서 보존된 문서.
  • YUI 2: JSON 유틸리티(2009년 9월 1일). 2012년 2월 12일에 원본 문서에서 보존된 문서. 2009년 10월 22일에 확인함.
  • JSON 알아보기(2010년 4월 7일) 2012년 2월 12일에 원본 문서에서 보존된 문서. 2010년 4월 7일에 확인함.
  • 제레미 그로스먼 Gmail을 사용하는 웹 애플리케이션에 대한 고급 공격 기술. 화이트햇 보안. 2012년 2월 12일에 원본 문서에서 보존된 문서. 2009년 9월 23일에 확인함.
  • from __future__ import * » 원격 JSON - JSONP . Bob.pythonmac.org. 2012년 2월 12일에 원본 문서에서 보존된 문서. 2008년 9월 8일에 확인함.
  • 알메이다, 요나스(2008년 6월 11일). "JSON, JSONP, JSONPP? "(S3DB). 2009년 4월 26일에 확인함.
  • RIA스팟 Cross Site XHR용 JSON P.(액세스할 수 없는 링크 - 이야기)
  • Dojo에서 참조하는 JSON. 2012년 2월 12일에 원본 문서에서 보존된 문서.
  • 연결
    • 러시아어 공식 형식 홈페이지
    • json.js, json2.js는 JavaScript에서 JSON 데이터 작업을 위해 Douglas Crockford가 개발한 라이브러리입니다. toJSONString 메서드를 사용하여 개체를 확장한 후 모든 개체에 존재하고 이를 JSON 형식 문자열로 변환합니다.
    • json-rpc.org(영어)
    문서 마크업 언어사무실 문서

    JSON 또는 JavaScript 객체 표기법은 키-값 쌍 및 순서 목록의 원칙을 기반으로 구조화된 데이터의 구조화되지 않은 텍스트 표현을 구현하는 형식입니다. JSON은 JavaScript에서 시작되었지만 기본적으로 또는 특수 라이브러리의 도움을 받아 대부분의 언어에서 지원됩니다. 일반적으로 Json은 웹 클라이언트와 웹 서버 간에 정보를 교환하는 데 사용됩니다.

    지난 15년 동안 JSON은 공식적인 데이터 교환 표준이 되었으며 사실상 인터넷의 모든 곳에서 사용됩니다. 오늘날 거의 모든 웹 서버에서 사용됩니다. 이러한 인기의 또 다른 이유는 많은 데이터베이스가 JSON을 지원한다는 사실이었습니다. PostgreSQL 및 MySQL과 같은 최신 관계형 데이터베이스는 이제 JSON으로 데이터 저장 및 내보내기를 지원합니다. MongoDB 및 Neo4j와 같은 데이터베이스도 JSON을 지원하지만 MongoDB는 약간 수정된 JSON 버전을 사용합니다. 이 기사에서는 JSON이 무엇인지, XML에 비해 장점과 단점, 그리고 언제 사용하는 것이 가장 좋은지 살펴보겠습니다.

    JSON 형식이 필요한 이유와 작동 방식을 이해하려면 연습이 필요합니다. 먼저 이 예를 살펴보겠습니다.

    {
    "firstName": "조나단",
    “성”: “프리먼”,
    "로그인 개수": 4,
    "isWriter": 사실,
    "worksWith": ["Spantree 기술 그룹", "InfoWorld"],
    "애완동물": [
    {
    “이름”: “릴리”,
    "유형": "너구리"
    }
    ]
    }

    이 프레임워크에서 우리는 개인의 일부 속성을 명확하게 정의했습니다. 먼저 이름, 성, 시스템 로그인 횟수, 이 사람이 작가인지 여부, 그가 일하는 회사 목록, 애완동물 목록을 확인했습니다. 이 구조 또는 유사한 구조는 서버에서 웹 브라우저 또는 모바일 애플리케이션으로 전송될 수 있으며, 그런 다음 이 데이터를 사용하여 필요한 모든 작업(예: 표시 또는 저장)을 수행할 수 있습니다.

    JSON은 문자열, 숫자, 부울(1 또는 0), 목록, 개체 및 null과 같은 최소 개수의 값 유형을 사용하는 일반 데이터 형식입니다. JSON은 JavaScript의 하위 집합이지만 가장 널리 사용되는 프로그래밍 언어에는 이러한 유형의 데이터가 있으므로 JSON은 다른 언어로 작성된 프로그램 간에 데이터를 전달하는 데 적합한 후보입니다.

    왜 JSON을 사용해야 할까요?

    JSON의 유용성과 중요성을 이해하려면 인터넷 상호작용의 역사를 조금 이해할 필요가 있습니다. 2000년대 초반부터 웹사이트의 상호작용 방식이 변화하기 시작했습니다. 당시 브라우저는 정보를 표시하는 역할만 하고 웹 서버는 표시할 콘텐츠를 준비하는 모든 작업을 수행했습니다. 사용자가 브라우저에서 버튼을 클릭하면 요청이 서버로 전송되고, 여기서 HTML 페이지가 구성되어 표시될 준비가 됩니다. 이 메커니즘은 느리고 비효율적이었습니다. 이를 위해서는 데이터의 작은 부분이 변경된 경우에도 브라우저가 페이지의 모든 내용을 다시 렌더링해야 했습니다.

    당시에는 전송된 데이터 양에 따라 전송 비용이 청구되었으므로 개발자는 전체 페이지를 다시 로드하는 데 비용이 매우 많이 든다는 것을 깨닫고 사용자 인터페이스를 개선하기 위한 새로운 기술을 고려했습니다. 그런 다음 Internet Explorer 5에 추가된 백그라운드에서 웹 요청을 수행하는 기능은 표시할 데이터를 점진적으로 로드하는 데 상당히 실행 가능한 접근 방식임이 밝혀졌습니다. 페이지를 다시 로드하는 대신 버튼을 클릭하면 백그라운드에서 실행되는 웹 요청이 실행됩니다. 콘텐츠가 로드되는 즉시 업데이트됩니다. 브라우저용 범용 프로그래밍 언어인 JavaScript를 사용하여 제어할 수 있습니다.

    처음에는 XML 형식으로 데이터를 전송했지만, 자바스크립트에서는 사용하기 어려웠습니다. JavaScript에는 이미 언어로 데이터를 나타내는 데 사용되는 개체가 있으므로 Douglas Crockford는 JS 개체 구문을 가져와 JSON이라는 새로운 데이터 교환 형식에 대한 사양으로 사용했습니다. 이 형식은 JavaScript 브라우저에서 읽고 구문 분석하기가 훨씬 쉬웠습니다. 곧 개발자들은 XML 대신 JSON을 사용하기 시작했습니다.

    오늘날 빠른 JSON 데이터 교환은 서버와 클라이언트, 모바일 애플리케이션, 심지어 내부 시스템 서비스 간 데이터 전송을 위한 사실상의 표준입니다.

    JSON 대 XML

    위에서 말했듯이 JSON의 주요 대안은 XML이었습니다. 그러나 XML은 새로운 시스템에서 덜 일반적입니다. 그리고 그 이유를 이해하는 것은 매우 쉽습니다. 다음은 XML을 통해 Json에서 위에서 본 데이터를 작성하는 예입니다.


    홍옥
    자유민
    4
    진실

    스팬트리 테크놀로지 그룹
    인포월드

    릴리
    너구리


    데이터를 작성하는 데 기본적으로 두 배의 공간을 차지하는 코드 중복성 외에도 XML은 데이터 구조를 분석할 때 약간의 모호함을 가져옵니다. XML을 JavaScript 개체로 변환하는 데는 수십 줄에서 수백 줄의 코드가 필요할 수 있으며 구문 분석되는 각 개체에 대한 미세 조정이 필요합니다. JSON을 JavaScript 개체로 변환하는 작업은 한 줄로 수행되며 구문 분석되는 개체에 대한 사전 지식이 필요하지 않습니다.

    JSON 제한 사항

    JSON은 많은 프로그래밍 언어에서 작업하기 쉬운 비교적 압축되고 유연한 데이터 형식이지만 몇 가지 단점이 있습니다. 다음은 몇 가지 제한 사항입니다.

    • 구조가 없습니다. 한편으로 이는 원하는 방식으로 데이터를 표시할 수 있는 완전한 유연성을 가지고 있음을 의미합니다. 반면에 구조화되지 않은 데이터를 쉽게 저장할 수 있습니다.
    • 한 가지 유형의 숫자만 있습니다. IEEE-754 부동 소수점 및 배정밀도 형식이 지원됩니다. 그 수는 꽤 많지만 다른 언어가 가지고 있는 다양한 숫자 유형을 사용할 수는 없습니다.
    • 날짜 유형이 없습니다. 개발자는 날짜의 문자열 표현을 사용해야 하며, 이로 인해 형식 불일치가 발생할 수 있습니다. 또는 Unix 시대의 시작(1970년 1월 1일) 이후 경과된 밀리초 수를 날짜로 사용합니다.
    • 주석 없음 - 코드에서 직접 필요한 필드에 주석을 달 수 없습니다.
    • Verbose - JSON은 XML보다 덜 장황하지만 가장 간결한 데이터 교환 형식은 아닙니다. 고급 서비스 또는 전문 서비스의 경우 보다 효율적인 형식을 사용하는 것이 좋습니다.
    언제 JSON을 사용해야 합니까?

    브라우저 또는 기본 모바일 앱과 상호 작용하는 소프트웨어를 개발하는 경우 JSON을 사용하는 것이 더 좋습니다. XML 사용은 더 이상 사용되지 않습니다. 서버 간 통신의 경우 JSON은 그다지 효율적이지 않을 수 있으므로 Apache Avro 또는 Apache Thrift와 유사한 직렬화 프레임워크를 사용하는 것이 더 좋습니다. 여기에서도 JSON은 나쁜 선택이 아니며 필요한 모든 것을 제공할 수 있습니다. 하지만 무엇을 선택해야 할지 정확한 답은 없습니다.

    MySQL 데이터베이스를 사용하는 경우, 프로그램은 데이터베이스에서 수행되는 작업에 크게 의존하게 됩니다. JSON을 지원하는 관계형 데이터베이스에서는 JSON을 최대한 적게 사용하는 것이 좋습니다. 관계형 데이터베이스는 특정 스키마를 사용하는 데이터용으로 설계되었습니다. 현재 대부분은 JSON 데이터 형식을 지원하지만 이를 사용한 작업 성능은 크게 저하됩니다.

    결론

    JSON은 주로 웹 서버와 브라우저 또는 모바일 애플리케이션 간에 데이터를 전송하는 것을 목표로 하는 데이터 형식입니다. 형식은 단순한 디자인과 유연성을 갖고 있어 읽고 이해하기 쉽고 대부분의 프로그래밍 언어에서 이러한 데이터를 사용하기 쉽습니다. 엄격한 스키마가 없기 때문에 형식에 유연성이 있지만 이러한 유연성으로 인해 때로는 데이터를 읽고 이해하기 어려울 수 있습니다.

    Scala나 Elm과 같은 강력한 형식의 언어에서는 JSON을 사용하여 작업하는 데 어려움을 겪을 수 있지만 형식이 널리 채택된다는 것은 복잡한 문제에도 도움이 되는 유틸리티와 라이브러리가 있다는 것을 의미합니다. 이제 json이 무엇인지, 어떻게 사용하는지 알았습니다.

    JSON은 무엇이고 어떤 기능을 할 수 있나요? 이 기사에서는 JSON을 사용하여 데이터를 쉽게 작업하는 방법을 알아봅니다. 또한 PHP와 JavaScript를 사용하여 JSON으로 작업하는 방법도 살펴보겠습니다.

    일반적으로 웹사이트나 웹 애플리케이션을 개발해 본 적이 있다면 적어도 JSON에 대해 들어본 적이 있을 것입니다. 그런데 JSON이 정확히 무엇을 의미하는 걸까요? 이 데이터 형식은 무엇을 할 수 있으며 어떻게 사용할 수 있습니까?

    이 글에서는 json 형식 작업의 기본 사항을 배웁니다. 우리는 다음 주제를 따를 것입니다:

    • JSON 형식이란 무엇입니까?
    • JSON 문자열을 만드는 방법은 무엇입니까?
    • JSON 데이터의 간단한 예
    • JSON과 XML 비교

    시작하자!

    JSON 형식이란 무엇입니까?

    JSON은 구조화된 데이터를 저장하고 전송하는 간단한 텍스트 기반 방법입니다. 간단한 구문을 사용하면 텍스트만 사용하여 간단한 숫자와 문자열은 물론 배열과 개체도 쉽게 저장할 수 있습니다. 또한 객체와 배열을 연결하여 복잡한 데이터 구조를 만들 수도 있습니다.

    JSON 문자열이 생성되면 텍스트일 뿐이므로 모든 애플리케이션이나 컴퓨터로 쉽게 보낼 수 있습니다.

    JSON에는 다음과 같은 많은 장점이 있습니다.

    • 컴팩트하다
    • 사람이 읽을 수 있고 컴퓨터에서도 쉽게 읽을 수 있습니다.
    • 숫자 값, 문자열, 부울 형식, null 값, 배열 및 연관 배열과 같은 소프트웨어 형식으로 쉽게 변환할 수 있습니다.
    • 거의 모든 프로그래밍 언어에는 json 데이터 형식을 읽고 생성할 수 있는 기능이 있습니다.

    문자 그대로, 약어 JSON은 JavaScript Object Notation을 나타냅니다. 앞서 설명한 대로 이 형식은 다른 프로그래밍 언어의 연관 배열과 유사한 객체 생성을 기반으로 합니다.

    JSON은 어떤 목적으로 사용되나요?

    무엇보다도 json은 자바스크립트와 서버사이드(php) 사이에서 데이터를 교환하는 데 사용됩니다. 즉, Ajax 기술을 위한 것입니다. 이는 여러 변수나 전체 데이터 배열을 전달할 때 매우 편리합니다.

    예를 들어 보면 다음과 같습니다.

  • 사용자가 썸네일 이미지를 클릭합니다.
  • JavaScript는 이 이벤트를 처리하고 이미지 ID를 전달하여 PHP 스크립트에 ajax 요청을 보냅니다.
  • 서버에서 PHP는 사진에 대한 설명, 사진 이름, 큰 이미지의 주소 및 데이터베이스로부터 기타 정보를 받습니다. 이를 수신하면 JSON 형식으로 변환하여 사용자 페이지로 다시 보냅니다.
  • JavaScript는 JSON 형식으로 응답을 수신하고, 데이터를 처리하고, HTML 코드를 생성하고, 설명 및 기타 정보와 함께 확대된 이미지를 표시합니다.
  • 브라우저에서 페이지를 다시 로드하지 않고 이미지를 확대하는 방법입니다. 이는 부분적인 데이터를 수신해야 하거나 소량의 정보를 서버로 전송해야 할 때 매우 편리합니다.

    모두가 좋아하는 jQuery에는 ajax 요청을 통해 형식 작업을 수행하는 데 도움이 되는 getJSON() 및 parsJSON() 함수가 있습니다.

    JSON 문자열을 만드는 방법은 무엇입니까?


    다음은 JSON 문자열을 생성하기 위한 기본 규칙입니다.

    • JSON 문자열에는 값 배열과 개체(이름/값 쌍이 있는 연관 배열)가 모두 포함되어 있습니다.
    • 배열은 대괄호 [ 및 ]로 묶어야 하며 쉼표로 구분된 값 목록을 포함할 수 있습니다.
    • 개체는 둥근 팔( 및 )을 사용하여 래핑되며 쉼표로 구분된 이름/값 쌍도 포함합니다.
    • 이름/값 쌍은 필드 이름(큰따옴표 안), 콜론(:), 필드 값으로 구성됩니다.
    • 배열이나 객체의 값은 다음과 같습니다.
      • 숫자(정수 또는 점으로 구분된 분수)
      • 문자열(큰따옴표로 묶음)
      • 부울(참 또는 거짓)
      • 기타 배열(대괄호 [ 및 ]로 묶임)
      • 기타 물체(구불구불한 팔( 및 )에 싸여 있음)
      • 널값

    중요한! 값에 큰따옴표를 사용하는 경우 백슬래시(\")로 이스케이프 처리하세요. 다른 프로그래밍 언어에서와 마찬가지로 16진수로 인코딩된 문자를 사용할 수도 있습니다.

    JSON 데이터의 간단한 예

    다음 예에서는 JSON 형식을 사용하여 온라인 상점의 "장바구니"에 데이터를 저장하는 방법을 보여줍니다.

    ("orderID": 12345, "shopperName": "John Smith", "shopperEmail": " [이메일 보호됨]", "contents": [ ( "productID": 34, "productName": "SuperWidget", "수량": 1 ), ( "productID": 56, "productName": "WonderWidget", "수량": 3 ) ], "orderCompleted": true )

    이 데이터를 하나씩 분석해 보겠습니다.

  • 시작과 끝에서 곱슬팔( 및 )을 사용하여 이것이 개체임을 분명히 합니다.
  • 객체 내부에는 여러 이름/값 쌍이 있습니다.
  • "orderID": 12345 - 필드 이름이 orderId이고 값이 12345입니다.
  • "shopperName": "John Smith" - 필드 이름이 shopperName이고 값이 John Smith입니다.
  • "shopperEmail": "johnsmith@ example.com" - 이전 필드와 유사하며 구매자의 이메일이 여기에 저장됩니다.
  • "contents": [ ... ] - 값이 배열인 content라는 필드입니다.
  • "orderCompleted": true - 값이 true인 orderCompleted라는 필드
  • 내용 배열 내부에는 카트 내용을 표시하는 두 개의 개체가 있습니다. 각 제품 개체에는 productID, productName, 수량이라는 세 가지 속성이 있습니다.
  • 마지막으로 JSON은 JavaScript의 개체와 동일하므로 이 예제를 쉽게 사용하여 JavaScript 개체를 만들 수 있습니다.

    var cart = ("orderID": 12345, "shopperName": "John Smith", "shopperEmail": " [이메일 보호됨]", "contents": [ ( "productID": 34, "productName": "SuperWidget", "수량": 1 ), ( "productID": 56, "productName": "WonderWidget", "수량": 3 ) ], "orderCompleted": true );

    JSON과 XML 비교

    대부분의 경우 적어도 웹 애플리케이션 내에서는 JSON을 XML의 대안으로 생각할 것입니다. Ajax 개념은 원래 XML을 사용하여 서버와 브라우저 간에 데이터를 교환하지만 최근에는 Ajax 데이터 전송에 JSON이 더 많이 사용됩니다.

    XML은 많은 애플리케이션에서 사용되는 검증된 기술이지만 JSON 형식의 장점은 더 컴팩트하고 쓰기 및 읽기가 더 쉽다는 것입니다.

    다음은 XML 형식으로만 다시 작성된 위의 JSON 예입니다.

    주문 ID 12345 구매자이름 John Smith 구매자이메일 [이메일 보호됨]내용 productID 34 productName SuperWidget 수량 1 productID 56 productName WonderWidget 수량 3 orderCompleted true

    보시다시피 JSON보다 몇 배 더 깁니다. 실제로 이 예제의 길이는 1128자이지만 JSON 버전은 323자에 불과합니다. XML 버전도 읽기가 더 어렵습니다.

    당연히 하나의 예만으로 판단할 수는 없지만, 적은 양의 정보라도 XML보다 JSON 형식이 공간을 덜 차지합니다.

    PHP와 JS를 통해 JSON으로 작업하는 방법은 무엇입니까?

    이제 가장 흥미로운 부분, 즉 JSON 형식의 실용적인 측면에 이르렀습니다. 먼저 JavaScript에 대한 찬사를 보낸 다음 PHP를 통해 JSON을 조작하는 방법을 살펴보겠습니다.

    JavaScript를 사용하여 JSON 형식 생성 및 읽기


    JSON 형식은 간단하지만 웹 애플리케이션을 개발할 때 수동으로 작성하기가 어렵습니다. 게다가 JSON 문자열을 변수로 변환한 다음 코드에서 사용해야 하는 경우도 많습니다.

    다행히도 많은 프로그래밍 언어가 JSON 문자열 작업을 위한 도구를 제공합니다. 주요 아이디어는 다음과 같습니다.

    JSON 문자열을 생성하려면 일부 값이 포함된 변수로 시작한 다음 데이터를 JSON 문자열로 변환하는 함수를 통해 이를 전달합니다.

    JSON 문자열을 읽으려면 특정 데이터가 포함된 JSON 문자열로 시작하고, 데이터가 포함된 변수를 생성하는 함수를 통해 문자열을 전달합니다.

    JavaScript에서 이것이 어떻게 수행되는지 살펴보겠습니다.

    JavaScript 변수에서 JSON 문자열 만들기

    JavaScript에는 javascript 변수를 가져와 변수의 내용을 나타내는 json 문자열을 반환하는 JSON.stringify()라는 내장 메서드가 있습니다. 예를 들어 이전에 생성된 객체를 사용하여 JSON 문자열로 변환해 보겠습니다.

    var cart = ("orderID": 12345, "shopperName": "John Smith", "shopperEmail": " [이메일 보호됨]", "contents": [ ( "productID": 34, "productName": "SuperWidget", "수량": 1 ), ( "productID": 56, "productName": "WonderWidget", "수량": 3 ) ], "orderCompleted": true ), 경고(JSON.stringify(cart));

    화면에 나타나는 내용은 다음과 같습니다.

    ("orderID":12345,"shopperName":"John Smith","shopperEmail":" [이메일 보호됨]", "contents":[("productID":34,"productName":"SuperWidget","수량":1), ("productID":56,"productName":"WonderWidget","수량":3) ], "주문완료":true)

    JSON.stringify()는 공백 없이 JSON 문자열을 출력합니다. 읽기는 어렵지만 더 컴팩트하므로 데이터를 보낼 때 중요합니다.

    JSON 문자열에서 JavaScript 변수 만들기

    JSON 문자열을 구문 분석하는 방법에는 여러 가지가 있으며, 가장 적합하고 안전한 방법은 JSON.parse() 메서드를 사용하는 것입니다. JSON 문자열을 사용하고 JSON 데이터가 포함된 JavaScript 개체 또는 배열을 반환합니다. 예는 다음과 같습니다.

    var jsonString = " \ ( \ "orderID": 12345, \ "shopperName": "John Smith", \ "shopperEmail": " [이메일 보호됨]", \ "contents": [ \ ( \ "productID": 34, \ "productName": "SuperWidget", \ "수량": 1 \), \ ( \ "productID": 56, \ "productName": " WonderWidget", \"수량": 3\ ) \ ], \"orderCompleted": true \ ) \"; var cart = JSON.parse(jsonString); 경고(cart.shopperEmail); 경고(cart.contents.productName);

    여기서는 이전에 제공된 예제의 JSON 문자열을 포함하는 jsonString 변수를 만들었습니다. 그런 다음 JSON.parse()를 통해 이 문자열을 전달하여 장바구니 변수에 저장된 JSON 데이터가 포함된 객체를 생성했습니다. 마지막으로, 데이터 가용성을 확인하고 경고 모달 창을 사용하여 일부 정보를 표시합니다.

    다음 정보가 표시됩니다.

    실제 웹 애플리케이션에서 JavaScript 코드는 AJAX 요청을 보낸 후 서버로부터 응답으로 JSON 문자열을 받은 다음 문자열을 구문 분석하고 장바구니 내용을 사용자에게 표시해야 합니다.

    PHP를 사용하여 JSON 형식 만들기 및 읽기

    JavaScript와 마찬가지로 PHP에는 변수를 JSON 형식으로 변환하거나 그 반대로 변환할 수 있는 기능이 있습니다. 그들을 살펴보자.

    PHP 변수에서 JSON 문자열 만들기

    Json_encode()는 PHP 변수를 가져와서 변수의 데이터를 나타내는 JSON 문자열을 반환합니다. 다음은 PHP로 작성된 "카트"의 예입니다:

    이 코드는 JavaScript 예제와 정확히 동일한 결과, 즉 변수의 내용을 나타내는 유효한 JSON 문자열을 생성합니다.

    ("orderID":12345,"shopperName":"John Smith","shopperEmail":" [이메일 보호됨]","contents":[("productID":34,"productName":"SuperWidget","수량":1),("productID":56,"productName":"WonderWidget","수량":3) ],"주문완료":true)

    실제로 PHP 스크립트는 AJAX 요청에 대한 응답으로 JSON 문자열을 보내야 하며, 여기서 JavaScript는 JSON.parse()를 사용하여 문자열을 변수로 변환합니다.

    json_encode() 함수에서 일부 문자를 16진수로 변환할 수 있는 추가 매개변수를 지정할 수 있습니다.

    JSON 문자열에서 PHP 변수 만들기

    위와 비슷하게 JSON 문자열을 디코딩하고 그 내용을 변수에 넣을 수 있는 json_decode() 함수가 있습니다.

    JavaScript와 마찬가지로 이 코드는 다음을 출력합니다.

    [이메일 보호됨]원더위젯

    기본적으로 json_decode()는 JSON 객체를 PHP 객체로 반환합니다. 일반 구문과 유사하게 ->를 사용하여 객체의 속성에 액세스합니다.

    나중에 데이터를 연관 배열로 사용하려면 두 번째 매개변수 true를 json_decode() 함수에 전달하기만 하면 됩니다. 예는 다음과 같습니다.

    $cart = json_decode($jsonString, true); 에코 $cart["shopperEmail"] . "
    "; echo $cart["contents"]["productName"] . "
    ";

    이는 동일한 결과를 생성합니다.

    [이메일 보호됨]원더위젯

    또한 json_decode() 함수에 추가 인수를 전달하여 큰 숫자 및 재귀 처리를 결정할 수도 있습니다.

    JSON 형식에 대한 결론

    Ajax 기술을 사용하여 웹 애플리케이션을 생성하려는 경우 서버와 브라우저 간의 데이터 교환을 위해 확실히 JSON 형식을 사용하게 될 것입니다.


    JSON에 대해 들어본 적이 있을 것입니다. 그것은 무엇입니까? 무엇을 할 수 있고 어떻게 사용하나요?

    이 튜토리얼에서는 JSON의 기본 사항을 다루고 다음 사항을 다룹니다.

    • JSON이란 무엇입니까?
    • JSON은 어떤 용도로 사용되나요?
    • JSON 문자열을 만드는 방법은 무엇입니까?
    • JSON 문자열의 간단한 예입니다.
    • JSON과 XML을 비교해 보겠습니다.
    • JavaScript와 PHP에서 JSON을 사용하는 방법은 무엇입니까?
    JSON이란 무엇입니까?

    JSON은 구조화된 데이터를 저장하고 전송하는 간단한 텍스트 기반 방법입니다. 간단한 구문을 사용하면 단일 숫자부터 문자열, 배열 및 일반 텍스트 개체까지 무엇이든 쉽게 저장할 수 있습니다. 배열과 객체를 함께 연결하여 복잡한 데이터 구조를 만들 수도 있습니다.

    JSON 문자열이 생성되면 일반 텍스트이므로 다른 애플리케이션이나 네트워크의 다른 위치로 쉽게 보낼 수 있습니다.

    JSON에는 다음과 같은 장점이 있습니다.

    • 컴팩트합니다.
    • 그 문장은 사람과 컴퓨터 모두 쉽게 읽고 구성할 수 있습니다.
    • 대부분의 프로그래밍 언어(숫자, 문자열, 부울, 배열 등)의 데이터 구조로 쉽게 변환할 수 있습니다.
    • 많은 프로그래밍 언어에는 JSON 구조를 읽고 생성하기 위한 함수와 라이브러리가 있습니다.

    JSON이라는 이름은 JavaScript Object Notation을 의미합니다. 이름에서 알 수 있듯이 이는 객체(다른 언어에서 연관 배열을 만드는 것과 유사) 및 배열을 정의하는 방법을 기반으로 합니다.

    JSON은 어떤 용도로 사용되나요?

    JSON의 가장 일반적인 용도는 서버에서 브라우저로 데이터를 보내는 것입니다. 일반적으로 JSON 데이터는 AJAX를 사용하여 전달됩니다. 이를 통해 브라우저와 서버는 페이지를 다시 로드하지 않고도 통신할 수 있습니다.

  • 사용자가 온라인 상점에서 제품 썸네일을 클릭합니다.
  • 브라우저에서 실행되는 JavaScript는 서버에서 실행되는 PHP 스크립트에 AJAX 요청을 생성하여 선택한 제품의 ID를 전달합니다.
  • PHP 스크립트는 데이터베이스에서 제품 이름, 설명, 가격 및 기타 정보를 가져옵니다. 그런 다음 데이터에서 JSON 문자열을 구성하여 브라우저로 보냅니다.
  • 브라우저에서 실행되는 JavaScript는 JSON 문자열을 수신하여 디코딩하고 사용자를 위해 페이지에 제품 정보를 표시합니다.
  • JSON 문자열을 GET 또는 POST 요청에 대한 매개변수로 전달하여 JSON을 사용하여 브라우저에서 서버로 데이터를 보낼 수도 있습니다. 그러나 이 방법은 AJAX 요청을 통한 데이터 전송이 단순화될 수 있으므로 덜 일반적입니다. 예를 들어 제품 ID는 GET 요청의 일부로 URL에 포함될 수 있습니다.

    jQuery 라이브러리에는 AJAX 요청을 통해 JSON을 사용하여 데이터를 쉽게 검색할 수 있게 해주는 getJSON() 및parseJSON()과 같은 여러 메서드가 있습니다.

    JSON 문자열을 만드는 방법은 무엇입니까?

    JSON 문자열을 생성하는 데는 몇 가지 기본 규칙이 있습니다.

    • JSON 문자열에는 값 배열 또는 개체(이름/값 쌍의 연관 배열)가 포함됩니다.
    • 정렬대괄호([ 및 ])로 묶여 있으며 쉼표로 구분된 값 목록을 포함합니다.
    • 객체중괄호(( 및 ))로 묶여 있으며 쉼표로 구분된 이름/값 쌍 목록을 포함합니다.
    • 이름/값 쌍큰따옴표로 묶인 필드 이름, 콜론(:) 및 필드 값으로 구성됩니다.
    • 의미배열이나 객체에는 다음이 있을 수 있습니다:
      • 숫자(정수 또는 부동 소수점)
      • 문자열(큰따옴표 안)
      • 부울 값(참 또는 거짓)
      • 다른 배열(대괄호로 묶음)
      • 다른 객체(중괄호로 묶임)
      • 널값

    문자열에 큰따옴표를 포함하려면 백슬래시( \" )를 사용해야 합니다. 많은 프로그래밍 언어와 마찬가지로 제어 문자와 16진수 코드 앞에 백슬래시를 붙여 문자열에 넣을 수 있습니다. 자세한 내용은 JSON 웹사이트를 참조하세요.

    간단한 JSON 문자열 예

    다음은 JSON 형식으로 주문하는 예입니다.

    ( "orderID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [이메일 보호됨]", "contents": [ ( "productID": 34, "productName": "슈퍼 제품", "수량": 1 ), ( "productID": 56, "productName": "기적의 제품", "수량": 3 ) ], "orderCompleted": true )

    해당 라인을 자세히 살펴보겠습니다.

    • 중괄호(( 및 ))를 사용하여 객체를 만듭니다.
    • 개체에는 여러 이름/값 쌍이 있습니다. "orderID": 12345 이름이 "orderId"이고 정수 값이 12345인 속성 "shopperName": "Vanya Ivanov" 이름이 "shopperName"이고 문자열 값이 "Vanya Ivanov"인 속성 " "쇼핑객이메일": " [이메일 보호됨]" 문자열 값이 포함된 "shopperEmail"이라는 속성 " [이메일 보호됨]" "contents": [ ... ] 값이 배열인 "contents"라는 속성 "orderCompleted": true "orderCompleted"라는 속성과 부울 값 true
    • "contents" 배열에는 주문의 개별 항목을 나타내는 2개의 개체가 있습니다. 각 객체에는 productID , productName 및 수량이라는 3가지 속성이 포함되어 있습니다.

    그런데 JSON은 JavaScript 개체 선언을 기반으로 하기 때문에 위의 JSON 문자열을 JavaScript 개체로 빠르고 쉽게 만들 수 있습니다.

    var cart = ( "orderID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [이메일 보호됨]", "contents": [ ( "productID": 34, "productName": "슈퍼 제품", "수량": 1 ), ( "productID": 56, "productName": "기적의 제품", "수량": 3 ) ], "orderCompleted": true );

    JSON과 XML의 비교

    여러 면에서 적어도 웹 애플리케이션 공간에서는 JSON을 XML의 대안으로 생각할 수 있습니다. AJAX의 개념은 원래 서버와 브라우저 간에 데이터를 전송하기 위해 XML을 사용하는 것을 기반으로 했습니다. 그러나 최근에는 AJAX 데이터를 전송하는 데 JSON이 점점 인기를 얻고 있습니다.

    XML은 상당히 많은 애플리케이션에서 사용되는 입증된 기술인 반면, JSON은 더 컴팩트하고 인식하기 쉬운 데이터 형식이라는 장점이 있습니다.

    위의 XML 예제 개체는 다음과 같습니다.

    주문 ID 12345 구매자이름 Vanya Ivanov 구매자이메일 [이메일 보호됨]내용 productID 34 productName 슈퍼 상품 수량 1 productID 56 productName 미라클 상품 수량 3 주문완료 true

    XML 버전은 훨씬 더 큽니다. 실제로 길이는 1128자이지만 JSON 버전은 323자에 불과합니다. XML 버전도 이해하기가 매우 어렵습니다.

    물론 이것은 급진적인 예이다. 그리고 더욱 컴팩트한 XML 레코드를 생성하는 것도 가능합니다. 그러나 심지어 JSON에 상응하는 것보다 훨씬 더 길어질 것입니다.

    JavaScript에서 JSON 문자열 작업

    JSON은 형식이 간단하지만 JSON 문자열을 수동으로 생성하는 것은 매우 지루합니다. 또한 JSON 문자열을 가져와 해당 내용을 코드에서 사용할 수 있는 변수로 변환해야 하는 경우가 많습니다.

    대부분의 프로그래밍 언어에는 변수를 JSON 문자열로 또는 그 반대로 쉽게 변환하는 도구가 있습니다.

    변수에서 JSON 문자열 만들기

    JavaScript에는 변수를 사용하고 해당 내용을 나타내는 JSON 문자열을 반환하는 JSON.stringify() 메서드가 내장되어 있습니다. 예를 들어, 예제의 주문 정보를 포함하는 JavaScript 개체를 생성한 다음, 여기에서 JSON 문자열을 생성해 보겠습니다.

    var cart = ( "orderID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [이메일 보호됨]", "contents": [ ( "productID": 34, "productName": "슈퍼 제품", "수량": 1 ), ( "productID": 56, "productName": "기적의 제품", "수량": 3 ) ], "orderCompleted": true ), 경고(JSON.stringify(cart));

    이 코드는 다음을 생성합니다.

    JSON.stringify() 메서드는 공백 없이 JSON 문자열을 반환합니다. 읽기는 더 어렵지만 네트워크를 통한 전송에는 더 컴팩트합니다.

    JavaScript에서 JSON 문자열을 구문 분석하는 방법에는 여러 가지가 있지만 가장 안전하고 안정적인 방법은 내장된 JSON.parse() 메서드를 사용하는 것입니다. JSON 문자열을 수신하고 데이터가 포함된 JavaScript 개체 또는 배열을 반환합니다. 예를 들어:

    var jsonString = " \ ( \ "orderID": 12345, \ "shopperName": "Vanya Ivanov", \ "shopperEmail": " [이메일 보호됨]", \ "contents": [ \ ( \ "productID": 34, \ "productName": "슈퍼 제품", \ "수량": 1 \), \ ( \ "productID": 56, \ "productName": "기적의 상품", \"수량": 3\ ) \ ], \"orderCompleted": true \ ) \"; var cart = JSON.parse(jsonString); 경고(cart.shopperEmail); 경고(cart.contents.productName);

    예제 주문의 JSON 문자열을 포함하는 jsonString 변수를 만들었습니다. 그런 다음 이 문자열을 JSON.parse() 메서드에 전달합니다. 이 메서드는 JSON 데이터가 포함된 객체를 생성하고 이를 장바구니 변수에 저장합니다. 남은 것은 shopperEmail 개체의 속성과 콘텐츠 배열의 productName을 표시하여 확인하는 것뿐입니다.

    결과적으로 다음과 같은 출력을 얻게 됩니다.

    실제 애플리케이션에서 JavaScript 코드는 서버 스크립트의 AJAX 응답에서 JSON 문자열로 주문을 수신하고 해당 문자열을 JSON.parse() 메서드에 전달한 다음 데이터를 사용하여 사용자 페이지에 표시합니다.

    JSON.stringify() 및 JSON.parse()에는 콜백 함수를 사용하여 특정 데이터를 사용자 정의하는 등의 다른 기능이 있습니다. 이러한 옵션은 다양한 데이터를 적절한 JavaScript 개체로 변환하는 데 매우 유용합니다.

    PHP에서 JSON 문자열 작업하기

    JavaScript와 마찬가지로 PHP에는 JSON 문자열 작업을 위한 내장 함수가 있습니다.

    PHP 변수에서 JSON 문자열 만들기

    json_encode() 함수는 PHP 변수를 사용하고 변수의 내용을 나타내는 JSON 문자열을 반환합니다. 다음은 PHP로 작성된 주문 예입니다.

    이 코드는 JavaScript 예제와 정확히 동일한 JSON 문자열을 반환합니다.

    ("orderID":12345,"shopperName":"Vanya Ivanov","shopperEmail":" [이메일 보호됨]","contents":[("productID":34,"productName":"슈퍼 제품","수량":1),("productID":56,"productName":"기적의 제품","수량": 3)],"주문완료":true)

    실제 애플리케이션에서 PHP 스크립트는 이 JSON 문자열을 AJAX 응답의 일부로 브라우저에 보냅니다. 여기서 JSON.parse() 메서드를 사용하는 JavaScript 코드는 이를 사용자 페이지에 표시하기 위한 변수로 다시 구문 분석합니다. .

    json_encode() 함수의 두 번째 인수로 다양한 플래그를 전달할 수 있습니다. 도움을 받으면 변수 내용을 JSON 문자열로 인코딩하는 원칙을 변경할 수 있습니다.

    JSON 문자열에서 변수 만들기

    JSON 문자열을 PHP 변수로 변환하려면 json_decode() 메서드를 사용하세요. JavaScript에 대한 예제를 PHP 코드가 있는 JSON.parse() 메서드로 바꾸겠습니다.

    JavaScript와 마찬가지로 이 코드는 다음을 생성합니다.

    [이메일 보호됨]기적의 제품

    기본적으로 json_decode() 함수는 JSON 객체를 PHP 객체로 반환합니다. stdClass 클래스의 일반 PHP 객체가 있습니다. 이것이 위의 예에서 객체의 속성에 액세스하기 위해 ->를 사용하는 이유입니다.

    연관된 PHP 배열로 JSON 객체가 필요한 경우 json_decode() 함수의 두 번째 인수로 true를 전달해야 합니다. 예를 들어:

    $cart = json_decode($jsonString, true); 에코 $cart["shopperEmail"] . "
    "; echo $cart["contents"]["productName"] . "
    ";

    이 코드는 동일한 출력을 생성합니다.

    [이메일 보호됨]기적의 제품

    json_decode() 함수에 다른 인수를 전달하여 재귀 깊이와 큰 정수를 처리하는 방법을 지정할 수도 있습니다.

    결론

    JSON은 이해하고 사용하기 쉽지만 특히 AJAX를 사용할 때 애플리케이션과 컴퓨터 간에 데이터를 전송하는 데 매우 유용하고 유연한 도구입니다. AJAX 애플리케이션을 개발할 계획이라면 JSON이 워크숍에서 필수적인 도구가 될 것이라는 데는 의심의 여지가 없습니다.