JSON: 두 판 사이의 차이

편집 요약 없음
편집 요약 없음
(사용자 8명의 중간 판 16개는 보이지 않습니다)
1번째 줄: 1번째 줄:
JSON(''Javascript Object Notation'')은 특정 언어로부터 완벽하게 독립적이고 XML보다 가벼운 데이터 교환 형식으로, 사람이 읽기 쉽고, 프로그램도 읽고 쓰기 참 쉬운 언어이다. [http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf ECMA 262]에 일부 토대를 두고 국제 표준 [http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf ECMA 404]에 기반한다.<ref>http://json.org/json-ko.html</ref>
JSON(''Javascript Object Notation'')은 특정 [[프로그래밍 언어|언어]]로부터 완벽하게 독립적이고 [[XML]]보다 가벼운 데이터 교환 형식으로, 사람이 읽기 쉽고, 프로그램도 읽고 쓰기 참 쉬운 언어이다. [http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf ECMA 262]에 일부 토대를 두고 국제 표준 [http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf ECMA 404]에 기반한다.<ref>http://json.org/json-ko.html</ref>


JavaScript에서 다음과 같이 객체를 생성 해본적이 있다면 참 쉽게 쓸 수 있다.
[[JavaScript]]에서 다음과 같이 객체를 생성 해본적이 있다면 참 쉽게 쓸 수 있다.
<source lang="ecmascript">var a={a:"sss",b:false};</source>
<source lang="ecmascript">var a={a:"sss",b:false};</source>


== 구조 ==
== 구조 ==
*이름과 값 형태의 쌍들로 이루어진 콜렉션 <ref>잘 이해가 안되면 객체 또는 구조체의 속성(속성 이름,속성 값)이나 C#의 KeyValuePair<,>에 빗대어 이해하면 된다.)</ref>
* [[이름]]과 값 형태의 쌍들로 이루어진 콜렉션 <ref>잘 이해가 안 되면 객체 또는 구조체의 속성(속성 이름,속성 값)이나 C#의 KeyValuePair<,>에 빗대어 이해하면 된다.)</ref>
*값들의 순서화된 리스트<ref>이해가 잘 안되면 배열에 빗대어 이해해보자.</ref>
* 값들의 순서화된 리스트<ref>이해가 잘 안 되면 배열에 빗대어 이해해보자.</ref>


보다 시피 이것들은 여러 프로그래밍 언어에서 쉽게 구현할 수 있으며, 이에 따라 여러 프로그래밍 언어에서 쉽게 JSON을 구현하거나 사용할 수 있다. (e.g. C#의 Newtonsoft.Json) (다만 Brainfuck같은 언어는 제외)
보다시피 이것들은 여러 [[프로그래밍 언어]]에서 쉽게 구현할 수 있으며, 이에 따라 여러 프로그래밍 언어에서 쉽게 JSON을 구현하거나 사용할 수 있다. (e.g. C#의 Newtonsoft.Json) (다만 Brainfuck같은 언어는 제외)


JSON에서 중요한 거 두가지가 있다.바로 object와 array이다.
JSON에서 중요한 거 두 가지가 있다.바로 객체 (object)와 배열 (array)이다.
===object===
object는 위에서 말한 이름과 값 형태의 쌍들의 비순서화된 모음이다. {로 시작하고 }로 끝난다. 각 이름 끝에 :를 붙이고 쌍과 쌍 사이는 ,로 구분한다.


예시<br /><pre>{name:"LiteHell",email:"asdf1234d@gmail.com"}</pre>
=== 객체 (object) ===
===array===
object는 위에서 말한 이름과 값 형태의 쌍들의 비순서화된 모음이다. {로 시작하고 }끝난다. 각 이름 끝에 :를 붙이고 쌍과 쌍 사이는 ,로 구분한다. 자바스크립트의 객체와는 약간 차이가 나는데, 이름에도 큰따옴표를 붙이는게 원칙이다. 붙이지 않아도 당장 오류를 뱉지는 않는 경우가 많지만, 받는 프로그램에 따라 다를 수 있으므로 되도록이면 붙이도록 하자.
array는 값들의 순서화된 collection이라고 첫번째 출처에서 나와있는데 그냥 순서있고 자료형을 따지지 않는 배열로 보면 된다. [로 시작하고 ]끝낸다. 값과 값 사이의 구분은 object와 마찬가지로 ,로 한다.


예시<br /><pre>["LiteHell","라이트헬","라헬","신의탑라헬아니야이XXX들야"]</pre>
예시<br /><pre>{"name":"Example","email":"example@example.com"}</pre>
 
=== 배열 (array) ===
array는 값들의 순서화된 collection이라고 첫 번째 출처에서 나와 있는데 그냥 순서 있고 자료형을 따지지 않는 배열로 보면 된다. [로 시작하고 ]로 끝낸다. 값과 값 사이의 구분은 object와 마찬가지로 ,로 한다.
 
예시<br /><pre>["abc","ㄱㄴㄷ","12345","aaaaaaaaaaaaaa~!"]</pre>


===값에 올 수 있는 값들===
===값에 올 수 있는 값들===
64번째 줄: 66번째 줄:
|}
|}
====number 주의사항====
====number 주의사항====
소수도 쓸 수 있는데 8진수나 16진수는 안되고 무조건 10진수만 쓸수 있다.
소수도 쓸 수 있는데 8진수나 16진수는 안 되고 무조건 10진수만 쓸 수 있다.
=JSON 예시=
=JSON 예시=
<pre>
<pre>
{
{
name:"LiteHell",
"name":"Kildong Hong",
email:"asdf1234d@gmail.com",
"email":"kildong.hong@example.com",
wanted:{wantedjob:"Programmer",wantednow:"exam score"},
"wanted":{"wantedjob":"chicken master","wantednow":"lottery"},
ate:["빠삐코","팽이팽이","보석바","죠스바","갈비","삼겹살","치킨","피자","콜라",{kind:"간장치킨",withbones:false},"...등등등"],
"ate":["빠삐코","팽이팽이","보석바","죠스바","갈비","삼겹살","치킨","피자","콜라",{kind:"간장치킨",withbones:false},"...등등등"],
wantedscore:100
"wantedscore":100
}
}
</pre>
</pre>
== 각 언어별 사용법 ==
=== [[JavaScript]] ===
기본적으로 JSON이 Javascript Object Notation의 줄임말인 만큼, 자바스크립트에서 JSON을 사용하는 방법은 간단하다. eval()을 사용하는 방법과 JSON.parse()를 사용하는 방법이 있다. 추천하는 방법은 후자.
==== eval()을 사용 ====
<source lang="ecmascript">
var jsonStr = '{"a":"asdf"}';
var obj;
eval('obj='+jsonStr);
console.log(obj); //Object {a: "asdf"}
</source>
이렇게 하면 obj에 {a: "asdf"} 라는 객체가 대입된다.
그러나 eval은 본래 문자열을 자바스크립트의 코드로 실행시키는 함수이다. 만약 누가 악의적인 코드를 json대신에 당신에게 보냈고, 그것을 eval로 실행하게 되면? [[답이 없다]]. 그래서 자바스크립트는 보다 안전하게 JSON을 자바스크립트의 객체로 만들 수 있는 함수를 제공하는데, 그것이 JSON.parse()이다.
==== JSON.parse()를 사용 ====
<source lang="ecmascript">
var jsonStr = '{"a":"asdf"}';
var obj;
obj = JSON.parse(jsonStr);
console.log(obj);
</source>
앞 문단과 같은 동작을 하는데, JSON이 아닌 코드가 들어가면 오류를 뱉어내므로 안전하게 사용할 수 있다. 그리고 미묘하게 더 편하다.
==== [[node.js]]에서 JSON파일 불러오기 ====
node.js역시 위의 두 가지 방법을 이용하여 JSON을 불러올 수 있는데, 가끔 JSON 파일(일반적으로 .json 확장자를 가지는)을 불러올 필요가 있다. 이 때는 require()를 사용하면 된다. 일반적으로 [[모듈]]을 불러올 때 사용하지만, json파일 역시 읽어올 수 있다.
<source lang="ecmascript">
var obj;
obj = require('./jsonFile.json');
console.log(obj);
</source>
같은 폴더의 jsonFile.json이라는 파일 내의 json을 파싱하여 obj에 넣어준다.
== 참고 및 인용 ==
== 참고 및 인용 ==
<references />
<references />
[[분류:컴퓨터 프로그래밍/마크업 언어]]
 
{{프로그래밍}}
[[분류:마크업 언어]]
[[분류:Ecma 표준]]

2019년 11월 10일 (일) 18:06 판

JSON(Javascript Object Notation)은 특정 언어로부터 완벽하게 독립적이고 XML보다 가벼운 데이터 교환 형식으로, 사람이 읽기 쉽고, 프로그램도 읽고 쓰기 참 쉬운 언어이다. ECMA 262에 일부 토대를 두고 국제 표준 ECMA 404에 기반한다.[1]

JavaScript에서 다음과 같이 객체를 생성 해본적이 있다면 참 쉽게 쓸 수 있다.

var a={a:"sss",b:false};

구조

  • 이름과 값 형태의 쌍들로 이루어진 콜렉션 [2]
  • 값들의 순서화된 리스트[3]

보다시피 이것들은 여러 프로그래밍 언어에서 쉽게 구현할 수 있으며, 이에 따라 여러 프로그래밍 언어에서 쉽게 JSON을 구현하거나 사용할 수 있다. (e.g. C#의 Newtonsoft.Json) (다만 Brainfuck같은 언어는 제외)

JSON에서 중요한 거 두 가지가 있다.바로 객체 (object)와 배열 (array)이다.

객체 (object)

object는 위에서 말한 이름과 값 형태의 쌍들의 비순서화된 모음이다. {로 시작하고 }로 끝난다. 각 이름 끝에 :를 붙이고 쌍과 쌍 사이는 ,로 구분한다. 자바스크립트의 객체와는 약간 차이가 나는데, 이름에도 큰따옴표를 붙이는게 원칙이다. 붙이지 않아도 당장 오류를 뱉지는 않는 경우가 많지만, 받는 프로그램에 따라 다를 수 있으므로 되도록이면 붙이도록 하자.

예시

{"name":"Example","email":"example@example.com"}

배열 (array)

array는 값들의 순서화된 collection이라고 첫 번째 출처에서 나와 있는데 그냥 순서 있고 자료형을 따지지 않는 배열로 보면 된다. [로 시작하고 ]로 끝낸다. 값과 값 사이의 구분은 object와 마찬가지로 ,로 한다.

예시

["abc","ㄱㄴㄷ","12345","aaaaaaaaaaaaaa~!"]

값에 올 수 있는 값들

  • 문자열
  • 숫자
  • 객체(위에 object)
  • 배열(위에 array)
  • 참/거짓 (true와 false)
  • null

string 간단 설명

길이 0 이상의 유니코드 문자열을 의미한다. 이스케이프 시퀸스들은 C계열 언어와 같이 \(백슬리쉬)로 시작된다. 하나의 문자도 하나의 문자열로 표현된다. (char도 string으로 표현된다.)

이스케이프 시퀸스 의미+부연설명
\" 큰따음표
\\ 역슬래쉬
\/ 슬래쉬
\b 백슬래쉬
\f Form feed
\n 개행
\r 캐리지 리턴
\t 수평 탭
\uXXXX 문자 U+XXXX, XXXX애는 16진수 네자리가 온다. (e.g. \u12FF를 하면 가 출력된다.))

number 주의사항

소수도 쓸 수 있는데 8진수나 16진수는 안 되고 무조건 10진수만 쓸 수 있다.

JSON 예시

{
"name":"Kildong Hong",
"email":"kildong.hong@example.com",
"wanted":{"wantedjob":"chicken master","wantednow":"lottery"},
"ate":["빠삐코","팽이팽이","보석바","죠스바","갈비","삼겹살","치킨","피자","콜라",{kind:"간장치킨",withbones:false},"...등등등"],
"wantedscore":100
}

각 언어별 사용법

JavaScript

기본적으로 JSON이 Javascript Object Notation의 줄임말인 만큼, 자바스크립트에서 JSON을 사용하는 방법은 간단하다. eval()을 사용하는 방법과 JSON.parse()를 사용하는 방법이 있다. 추천하는 방법은 후자.

eval()을 사용

var jsonStr = '{"a":"asdf"}';
var obj;
eval('obj='+jsonStr);
console.log(obj); //Object {a: "asdf"}

이렇게 하면 obj에 {a: "asdf"} 라는 객체가 대입된다.

그러나 eval은 본래 문자열을 자바스크립트의 코드로 실행시키는 함수이다. 만약 누가 악의적인 코드를 json대신에 당신에게 보냈고, 그것을 eval로 실행하게 되면? 답이 없다. 그래서 자바스크립트는 보다 안전하게 JSON을 자바스크립트의 객체로 만들 수 있는 함수를 제공하는데, 그것이 JSON.parse()이다.

JSON.parse()를 사용

var jsonStr = '{"a":"asdf"}';
var obj;
obj = JSON.parse(jsonStr);
console.log(obj);

앞 문단과 같은 동작을 하는데, JSON이 아닌 코드가 들어가면 오류를 뱉어내므로 안전하게 사용할 수 있다. 그리고 미묘하게 더 편하다.

node.js에서 JSON파일 불러오기

node.js역시 위의 두 가지 방법을 이용하여 JSON을 불러올 수 있는데, 가끔 JSON 파일(일반적으로 .json 확장자를 가지는)을 불러올 필요가 있다. 이 때는 require()를 사용하면 된다. 일반적으로 모듈을 불러올 때 사용하지만, json파일 역시 읽어올 수 있다.

var obj;
obj = require('./jsonFile.json');
console.log(obj);

같은 폴더의 jsonFile.json이라는 파일 내의 json을 파싱하여 obj에 넣어준다.

참고 및 인용

  1. http://json.org/json-ko.html
  2. 잘 이해가 안 되면 객체 또는 구조체의 속성(속성 이름,속성 값)이나 C#의 KeyValuePair<,>에 빗대어 이해하면 된다.)
  3. 이해가 잘 안 되면 배열에 빗대어 이해해보자.