JSON이란 무엇이며 왜 사용해야합니까?


542

나는 wikipedia와 Google을 보았고 공식 문서를 읽었지만 여전히 JSON이 무엇인지, 왜 그것을 사용 해야하는지 이해하지 못했습니다.

PHP, MySQL 및 Javascript / HTML을 사용하여 잠시 동안 응용 프로그램을 구축 해 왔으며 JSON이 내 삶을 더 쉽게 만들거나 코드를 개선하거나 사용자 인터페이스를 개선하기 위해 무언가를 할 수 있다면 그것에 대해 알고 싶습니다. 누군가 간결한 설명을 해줄 수 있습니까?


2
JSON은 YAML의의 하위 집합입니다 yaml.org
브래드 길버트

15
copterlabs.com/blog/json-what-it-is-how-it-works-how-to-use-it 이것은 사용에 대한 간단한 예제입니다
Tom

1
또한 I-JSON에 대해 읽으십시오 : tbray.org/ongoing/When/201x/2015/03/23/i-json
Christophe Roussy

1
브래드 길버트 (Brad Gilbert) 실제로는 아닙니다-데이터를 표현하는 자체 방식이며 JSON과 비슷합니다. 두 객체가 모두 문자열 (XML 또는 plists 또는 다른 많은 것과 유사 함)로 표현된다는 점에서 JSON은 기계 쓰기에는 더 좋고 인간 쓰기에는 YAML이 더 좋습니다 .
Ben Aubin

답변:


649

JSON (JavaScript Object Notation)은 데이터 교환에 사용되는 간단한 형식입니다. JavaScript의 하위 세트 (객체가 JavaScript로 빌드되는 방식)를 기반으로합니다. MDN에 명시된 바와 같이 일부 JavaScript는 JSON이 아니며 일부 JSON은 JavaScript가 아닙니다.

이것이 사용되는 예는 웹 서비스 응답입니다. 예전에는 웹 서비스가 데이터를 다시 전송하기 위해 기본 데이터 형식으로 XML을 사용했지만 JSON이 등장한 이후 ( JSON 형식은 Douglas Crockford의 RFC 4627 에 명시되어 있음) 훨씬 선호하기 때문에 선호되는 형식이었습니다. 경량

공식 JSON 웹 사이트 에서 더 많은 정보를 찾을 수 있습니다 .

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

  • 이름 / 값 쌍의 모음입니다. 다양한 언어에서 이것은 객체, 레코드, 구조체, 사전, 해시 테이블, 키 목록 또는 연관 배열로 실현됩니다.
  • 정렬 된 값 목록. 대부분의 언어에서 이는 배열, 벡터, 목록 또는 시퀀스로 실현됩니다.

JSON 구조



JSON 객체 다이어그램

JSON 배열 다이어그램

JSON 값 다이어그램

JSON 문자열 다이어그램

JSON 번호 다이어그램

다음은 JSON 데이터의 예입니다.

{
     "firstName": "John",
     "lastName": "Smith",
     "address": {
         "streetAddress": "21 2nd Street",
         "city": "New York",
         "state": "NY",
         "postalCode": 10021
     },
     "phoneNumbers": [
         "212 555-1234",
         "646 555-4567"
     ]
 }

JavaScript의 JSON

JSON (Javascript)은 문자열입니다!

사람들은 종종 모든 Javascript 객체가 JSON이고 JSON이 Javascript 객체라고 가정합니다. 이것은 올바르지 않습니다.

Javascript var x = {x:y}JSON아닌 경우 이것은 Javascript 객체 입니다. 둘은 같은 것이 아닙니다. JSON에 해당하는 (Javascript 언어로 표시)는입니다 var x = '{"x":"y"}'. x자체가 아닌 문자열 유형의 객체입니다 . 본격적인 Javascript 객체로 변환하려면 먼저 구문 분석해야합니다 var x = JSON.parse('{"x":"y"}');.x 이제 객체 그러나 이것은 더 이상 JSON 없습니다.

자바 스크립트 객체 대 JSON 참조


JSON 및 JavaScript로 작업 할 때이 eval함수 를 사용하여 콜백에서 반환 된 결과를 평가하려는 유혹이있을 수 있지만 JSON에서는 유효하지만 JavaScript에서는 2 개의 문자 (U + 2028 및 U + 2029)가 있으므로 제안되지 않습니다. ( 여기에서 더 읽기 참조 ).

따라서 Crockford의 스크립트를 평가하기 전에 유효한 JSON을 확인하는 스크립트를 항상 사용해야합니다. 스크립트 설명에 대한 링크가 있습니다 여기에 있으며 여기 js 파일에 대한 직접 링크 가 있습니다. 오늘날 모든 주요 브라우저에는 자체 구현이 있습니다 위한 이 있습니다.

JSON 파서를 사용하는 방법에 대한 예 (위 코드 스 니펫의 json 사용) :

//The callback function that will be executed once data is received from the server
var callback = function (result) {
    var johnny = JSON.parse(result);
    //Now, the variable 'johnny' is an object that contains all of the properties 
    //from the above code snippet (the json example)
    alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};

JSON 파서는 또 다른 유용한 방법을 제공합니다. stringify . 이 메소드는 JavaScript 오브젝트를 매개 변수로 승인하고 JSON 형식의 문자열을 다시 출력합니다. 이는 서버로 데이터를 다시 보내려 는 경우에 유용 합니다.

var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}

위의 두 가지 방법 (parsestringify)은 두 번째 매개 변수를 사용합니다.이 매개 변수는 최종 결과의 모든 수준에서 모든 키와 값에 대해 호출되는 함수이며 각 값은 입력 된 함수의 결과로 대체됩니다. (자세한 내용은 여기 )

Btw, JSON이 JavaScript만을위한 것이라고 생각하는 모든 사람들을 위해, 그렇지 않으면 설명하고 확인 하는 이 게시물 을 확인하십시오.


참고 문헌


1
정보가 직렬화되는 방식에 관계없이 구문 분석기가 제공됩니다. 따라서 누가 구현 세부 정보를 추상화하려는 경우 데이터를 전송하는 데 사용하는 형식에 관심이 있습니다.
Tom Lehman

6
실제로 클라이언트와 서버로 데이터를 전송하는 경우 응답 크기에주의를 기울이는 것이 중요하다고 생각합니다.
Andreas Grech

9
현학적 인 경우, JSON은 엄격한 집합되는 것을 방지 자바 스크립트를 다르게 처리하는 문자의 몇 가지 있습니다 : timelessrepo.com/json-isnt-a-javascript-subset
제레미 은행

XML보다 훨씬 가볍다는 것은 파일 크기를 의미합니까, 아니면 경량은 공간적 의미가 있습니까?
whatahitson

1
XML을 JSON으로 대체 하시겠습니까? 그게 당신의 말입니까? 그렇다면 xml은 악몽입니다.
James111

66

개념 설명-코드 또는 기술 전문 용어 없음

JSON이란 무엇입니까? – 아내 TM 에게 설명하는 방법

나 : “기본적으로 누군가와 서면으로 의사 소통하는 방법이지만 매우 구체적인 규칙이 있습니다.

부인 : 네 ..?

나 : prosaic English에서, 규칙은 케이지 싸움과 마찬가지로 매우 느슨합니다. JSON에서는 그렇지 않습니다. 무언가를 설명하는 방법에는 여러 가지가 있습니다.

• 예 1 : 우리 가족은 4 명 : 당신과 나 그리고 2 명의 아이들이 있습니다.

• 예 2 : 우리 가족 : 당신, 나, kid1 및 kid2.

• 예 3 : 가족 : [당신, 나, kid1, kid2]

• 예 4 : 우리는 가족에 4 명의 사람들이 있습니다 : mum, dad, kid1 및 kid2.

부인 : 왜 일반 영어를 대신 사용하지 않습니까?

나 : 그들은, 그러나 우리가 컴퓨터를 다루고 있다는 것을 기억하십시오. 컴퓨터는 어리 석고 문장을 이해할 수 없습니다. 그래서 우리는 컴퓨터가 관여 할 때 정말로 구체적이어야합니다. 그렇지 않으면 컴퓨터가 혼란스러워집니다. 또한 JSON은 매우 효율적인 의사 소통 방식이므로 관련이없는 대부분의 내용이 잘립니다. 가족, 컴퓨터와 의사 소통하기를 원하는 경우 다음과 같이 할 수 있습니다.

{
                "Family" :  ["Me", "Wife", "Kid1", "Kid2"] 
}

…… 기본적으로 JSON입니다. 그러나 반드시 JSON 문법 규칙을 준수해야합니다. 이러한 규칙을 어기면 컴퓨터는 단순히 작성중인 내용을 이해하지 못합니다 (예 : 파싱).

부인 : 어떻게 Json에 글을 쓰나요?

좋은 방법은 json serialiser를 사용하는 것입니다.이 직렬 라이저는 무거운 작업을 수행하는 라이브러리입니다.

요약

JSON은 기본적으로 매우 구체적인 규칙을 사용하여 데이터를 누군가에게 전달하는 방법입니다. 키 값 쌍 및 배열 사용. 이것이 개념이며,이 시점에서 위의 특정 규칙을 읽을 가치가 있습니다.


48

간단히 말해 JSON은 이러한 방식으로 직렬화하는 방법으로 JavaScript 코드가됩니다. (eval 또는 다른 방법으로) 실행될 때이 코드는 직렬화 한 데이터가 포함 된 JavaScript 객체를 생성하고 반환합니다. JavaScript는 다음 구문을 허용하기 때문에 사용할 수 있습니다.

var MyArray = [ 1, 2, 3, 4]; // MyArray is now an array with 4 elements
var MyObject = {
    'StringProperty' : 'Value',
    'IntProperty' : 12,
    'ArrayProperty' : [ 1, 2, 3],
    'ObjectProperty' : { 'SubObjectProperty': 'SomeValue' }
}; // MyObject is now an object with property values set.

여러 가지 용도로 사용할 수 있습니다. 하나는 서버 백엔드에서 JavaScript 코드로 데이터를 전달하는 편리한 방법입니다. 따라서 이것은 종종 AJAX에서 사용됩니다.

또한 XML보다 단순하고 공간을 덜 차지하는 독립형 직렬화 메커니즘으로 사용할 수도 있습니다. 다양한 프로그래밍 언어를 위해 JSON에서 객체를 직렬화 및 직렬화 해제 할 수있는 많은 라이브러리가 있습니다.


31

즉, 데이터를 전달하기위한 스크립팅 표기법입니다. 어떤면에서는 기본 데이터 유형, 배열 및 연관 배열 (기본적으로 Objects라고하는 이름-값 쌍)을 기본적으로 지원하는 XML의 대안입니다.

구문은 JavaScript에서 사용되며 JSON 자체는 "JavaScript Object Notation"을 나타냅니다. 그러나 이식 가능해졌으며 다른 언어에서도 사용됩니다.

자세한 내용은 다음 링크를 참조하십시오 :

http://secretgeek.net/json_3mins.asp


19

JSON 형식은 종종 네트워크 연결을 통해 구조화 된 데이터를 직렬화하고 전송하는 데 사용됩니다. 주로 XML 대신 서버와 웹 응용 프로그램간에 데이터를 전송하는 데 사용됩니다.


16

JSON은 JavaScript 객체 표기법입니다. XML에 비해 네트워크 연결을 통해 데이터 세트를 전송하는 훨씬 간단한 방법입니다. XML이 그렇지 않으면 "권장"옵션 인 AJAX와 유사한 애플리케이션에서 JSON을 사용하는 것이 좋습니다. XML의 자세한 내용은 다운로드 시간과 대역폭 소비량 ($$$)을 증가시킵니다. JSON으로 동일한 효과를 얻을 수 있으며 마크 업은 기본 구조가 아닌 데이터 자체에 거의 독점적으로 사용됩니다.


11

일반적인 대답은 AJAX를 사용하여 데이터 요청을하는 경우 객체를 JSON 문자열로 쉽게 보내고 반환 할 수 있다는 것입니다. AJAX 요청에서 서버로 데이터를 전송하기 위해 모든 자바 스크립트 유형에 대한 JavaScript 지원 toJSON () 호출에 대한 사용 가능한 확장. AJAX 응답은 간단한 eval 호출로 Javascript 객체로 변환 할 수있는 JSON 문자열로 객체를 반환 할 수 있습니다 (예 : AJAX 함수 someAjaxFunctionCallReturningJson이 반환 된 경우)

"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"

당신은 자바 스크립트로 작성할 수 있습니다

var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);

JSON은 웹 서비스 페이로드 등에 사용할 수도 있지만 AJAX 결과에는 매우 편리합니다.

  • 업데이트 (10 년 후) :이 작업을 수행하지 말고 JSON.parse를 사용하십시오.

1
eval ()을 사용하면 모든 것이 평가됩니다. 보안 위험이 있습니다.
토마스 웰러

@ThomasWeller 네,이 답변은 고대입니다 .JSON과 함께 갈 것입니다. 지금 감사합니다!
Steven A. Lowe

8

JSON이 너무 간결하기 때문에 주로 JSON을 좋아 합니다. gzip으로 압축 할 수있는 웹 컨텐츠의 경우 이것이 큰 문제는 아닙니다 (따라서 x html이 그렇게 인기가있는 이유 ). 그러나 이것이 도움이 될 수있는 경우가 있습니다.

예를 들어, 한 프로젝트에서 XMPP 를 통해 직렬화 및 전송해야하는 정보를 전송했습니다. . 대부분의 서버는 단일 메시지로 전송할 수있는 데이터의 양을 제한하기 때문에 명백한 대안 인 XML보다 JSON을 사용하는 것이 도움이됩니다.

추가 보너스로, 파이썬이나 자바 스크립트에 익숙하다면 이미 JSON에 대해 잘 알고 있으며 많은 교육을받지 않고도 해석 할 수 있습니다.


8

JSON이란 무엇입니까?

JSON (JavaScript Object Notation)은 JavaScript의 객체 리터럴에서 영감을 얻은 간단한 데이터 교환 형식입니다.

JSON 값은 다음으로 구성 될 수 있습니다.

객체 (이름-값 쌍의 모음) 배열 (정렬 된 값 목록) 문자열 (큰 따옴표로 묶음) 숫자 true, false 또는 null

JSON은 언어와 무관합니다.

PHP와 JSON?

PHP 버전 5.2.0 이후, JSON 확장은 기본적으로 기능을 디코딩하고 인코딩합니다.

Json_encode-값의 JSON 표현을 리턴합니다. Json_decode-JSON 문자열을 디코딩합니다. Json_last_error-마지막으로 발생한 오류를 리턴합니다.

JSON 구문 및 규칙?

JSON 구문은 JavaScript 객체 표기법 구문에서 파생됩니다.

데이터는 이름 / 값 쌍에 있습니다. 데이터는 쉼표로 구분됩니다.


4

우리는 대학에서 프로젝트를 수행해야하며 매우 큰 문제에 직면했습니다.이를 동일한 출처 정책이라고합니다. 다른 점은 Javascript의 XMLHttpRequest 메소드가 사이트가있는 도메인 이외의 도메인에 요청을 할 수 없도록합니다.

예를 들어 사이트가 www.example.com 인 경우 www.otherexample.com에 요청할 수 없습니다. JSONRequest를 사용하면 허용하지만 해당 사이트에서 허용하는 경우 JSON 형식으로 결과를 얻을 수 있습니다 (예 : JSON으로 메시지를 반환하는 웹 서비스가 있음). 그것은 아마도 JSON을 사용할 수있는 한 가지 문제입니다.

실용적인 것이 있습니다 : Yahoo JSON


4

JSON과 기존 구문의 차이점은 다음과 같습니다 (Javascript).

전통적인

 function Employee(name, Id, Phone, email){

      this.name = name;
      this.Id = Id;
      this.Phone = Phone;
      this.email = email;
  }

  //access or call it as 

var Emp = new Employee("mike","123","9373849784","mike.Anderson@office.com");

JSON으로

JSON을 사용하면 다음과 같이 다른 방식으로 정의 할 수 있습니다.

  function Employee(args){

   this.name = args.name;
   this.Id = args.Id;
   this.Phone = args.Phone;
   this.email = args.email;
}

//now access this as...

var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'});

우리가 기억해야 할 중요한 것은 JSON 메소드없이 100 개의 요소로 "직원"클래스 또는 모달을 빌드해야하는 경우 클래스를 만들 때 모든 것을 구문 분석해야한다는 것입니다. 그러나 JSON을 사용하면 클래스의 새 객체가 정의 된 경우에만 객체를 인라인으로 정의 할 수 있습니다.

아래의이 줄은 JSON으로 작업을 수행하는 방법입니다 (작업을 정의하는 간단한 방법).

 var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'});

2
그것은 정확히 JSON이 아닙니다 – 그것은 자바 스크립트 객체 (JSON이 아님)
Ben Aubin

4

때로는 기술이 필요하지 않은 곳에 기술이 제공되며, 가장 많이 투표 된 답변은 기술적으로 구체적이고 구체적이지만, 나는 Wikipedia에서 찾을 수있는 것보다 더 이해하기 쉽고 간결하다고 생각하지 않습니다. 공식 문서.

JSON을 생각하는 방식은 다른 언어의 세계에있는 언어입니다. 그러나 JSON과 다른 언어의 차이점은 "모국어"와 함께 "모든 사람"이 JSON을 "말하는"것입니다.

실제 사례를 사용하여 세 사람이 있다고 가정 해 봅시다. 한 사람은 이그 보어를 모국어로 사용합니다. 두 번째 사람은 첫 번째 사람과 대화하고 싶지만 첫 번째 사람은 요 루바 어를 모국어로 사용합니다.

우리는 무엇을 할 수 있습니까?

다행히, 우리의 예에서 세 번째 사람은 영어를 성장뿐만 아니라 말을하는 일 모두 번째 언어로 이그보어 및 요루바어을, 그래서 처음 두 사람 사이의 중개자 역할을 할 수 있습니다.

프로그래밍 세계에서 첫 번째 "사람"은 파이썬이고, 두 번째 "사람"은 루비이고, 세 번째 "사람"은 JSON이며, 루비를 파이썬으로 "번역"할 수 있으며 그 반대도 마찬가지입니다! 분명히이 비유는 완벽한 것이 아니지만 이중 언어를 사용하는 사람으로서 JSON이 다른 프로그래밍 언어와 상호 작용하는 방법을 쉽게 볼 수 있다고 생각합니다.


2

매우 간단합니다. JSON은 Java Script Object Notation의 약어입니다. 소프트웨어 구성 요소간에 데이터를 전송하기 위해 XML을 사용하는 대안으로 생각하십시오.

예를 들어, 최근에는 JSON을 반환하는 많은 웹 서비스를 작성했으며 일부 Javascript 개발자는 서비스를 호출하고 해당 형식으로 반환 된 정보를 사용하는 코드를 작성했습니다.


2

JSON (Javascript object notation)은 데이터 교환 / 전송을위한 경량 데이터 형식입니다. JavaScript와 마찬가지로 키 값 쌍입니다. REST API의 경우 서버에서 클라이언트로의 데이터 전송에 널리 사용됩니다. 오늘날 많은 소셜 미디어 사이트에서이 기능을 사용하고 있습니다. 데이터 유형과 관련하여 XML만큼 강력하지는 않습니다. XML에는 매우 풍부한 데이터 유형과 XSD가 있습니다. JSON에는 약간 부족합니다.

동일한 양의 문자열 데이터의 경우 XML에는 모든 열기 및 닫기 태그 등이 있기 때문에 JSON은 XML과 비교할 때 더 가볍습니다.


0

Java 컨텍스트에서 JSON이 사용되기를 원하는 한 가지 이유는 Java의 직렬화 프레임 워크를 대체 할 수있는 훌륭한 대안을 제공하기 때문입니다.

Joshua Bloch는 항목 85 "Java 직렬화에 대한 대안 선호"(Effective Java 3rd Edition)에서 이에 대해 자세히 설명합니다.

Java의 직렬화는 처음에 데이터 구조를 쉽게 전송하거나 저장할 수있는 형식으로 변환하는 것이 었습니다. JSON은 위에서 언급 한 심각한 악용없이이 요구 사항을 충족합니다.


-3

다음 코드를 사용하여 PHP json 응답을 구문 분석하십시오. read.php

<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>
<script type="text/javascript">  
$.ajax({
    url:'index.php',
    data:{},
    type:"POST",
    success:function(result) {
        jsondecoded = $.parseJSON(result);
        $.each(jsondecoded, function(index, value) {
            $("#servers").text($("#servers").text() + " " + value.servername);
            console.log(value.start);
            console.log(value.end);
            console.log(value.id);
        });
    },
    statusCode: {
    404: function() {
      alert( "page not found" );
    }
  }
});
</script>

server.php

<?php 
echo '[{"start":"2017-08-29","end":"2017-09-01","id":"22"},{"start":"2017-09-03","end":"2017-09-06","id":"23"}]';
?>

이 코드는 질문에 대답 할 수 있지만 문제를 해결하는 방법 및 / 또는 이유에 대한 추가 컨텍스트를 제공하면 답변의 장기적인 가치가 향상됩니다.
Nic3500
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.