JSON 튜토리얼
JSON 시작하기
수색…
비고
JSON (JavaScript Object Notation) 은 원래 Douglas Crockford가 지정한 가장 널리 사용되고 널리 받아 들여지는 데이터 교환 형식 중 하나입니다.
현재이 표준은 RFC 71592 및 ECMA-404의 두 경쟁 표준에 의해 설명됩니다. ECMA 표준은 허용되는 문법 구문 만 설명하는 반면, RFC는 몇 가지 의미 및 보안 고려 사항을 제공하므로 최소한의 것입니다.
- JSON은 클라이언트와 서버간에 데이터를 교환하기위한 클라이언트 - 서버 아키텍처가 포함 된 소프트웨어에서 널리 사용됩니다.
- JSON은 사용하기 쉽고 텍스트 기반, 가볍고 사람이 읽을 수있는 형식으로되어 있으며 사람들은 종종 XML을 대체하는 것으로 오해하고 있습니다.
- 약어는 JavaScript로 시작하지만 JSON은 언어가 아니거나 언어 표기법을 사용하여 데이터 표기법에 대한 스펙 만 있습니다.
- 거의 모든 프론트 라인 언어 / 프레임 워크와 같은 JSON 데이터 포맷을 지원하는 플랫폼 및 언어 독립적이며 inbuilt는 C #, PHP, Java, C ++, Python, Ruby 등 일부 인기있는 언어로 제공됩니다. 그리고 더 많은.
- JSON의 공식 인터넷 미디어 유형은 application / json입니다.
- JSON 파일 이름 확장자는 .json입니다.
버전
JSON에는 업데이트가 없으므로 JSON 버전은 1 개뿐입니다. 아래 링크는 RFC 4627 인 원본 RFC 문서로 리디렉션됩니다.
번역 | 출시일 |
---|---|
기발한 | 2006-07-28 |
JSON 구문 규칙
JSON (JavaScript Object Notation) 구문은 JavaScript의 하위 집합을 기반으로합니다 ( json.org 참조).
유효한 JSON 표현식은 다음 데이터 유형 중 하나 일 수 있습니다.
- 간단한 데이터 유형 : 문자열, 숫자, 부울, 널
- 복합 데이터 유형 : 값, 객체, 배열
단순 데이터 유형
JSON 문자열은 큰 따옴표로 묶어야하며 0 개 이상의 유니 코드 문자를 포함 할 수 있습니다. 백 슬래시 이스케이프가 허용됩니다. 허용되는 JSON 번호는 E 표기법 입니다. Boolean은 true
, false
중 하나입니다. null은 예약 된 키워드 null
입니다.
데이터 형식 | 유효한 JSON의 예 |
---|---|
### String | "apple" |
"苹果" | |
"\u00c4pfel\n" | |
"" | |
### 번호 | 3 |
1.4 | |
-1.5e3 | |
### 부울 | true |
false | |
### 없는 | null |
복합 데이터 유형
값JSON 값은 String, Number, Boolean, Null, Object, Array 중 하나 일 수 있습니다.
목적JSON 객체는 이름이 String이고 값이 JSON 값인 중괄호로 묶인 name : value 쌍의 쉼표로 구분 된 정렬되지 않은 컬렉션입니다.
정렬JSON 배열은 JSON 값의 정렬 된 컬렉션입니다.
JSON 배열의 예 :
["home", "wooden"]
JSON 객체의 예 :
{
"id": 1,
"name": "A wooden door",
"price": 12.50,
"tags": ["home", "wooden"]
}
[
1,
2,
[3, 4, 5, 6],
{
"id": 1,
"name": "A wooden door",
"price": 12.50,
"tags": ["home", "wooden"]
}
]
JSON 데이터의 유효성을 검사하고 서식을 지정하기위한 온라인 도구 :
- http://jsonlint.com/
- http://www.freeformatter.com/json-validator.html
- http://jsonviewer.stack.hu/
- http://json.parser.online.fr/
JSON 객체
JSON 객체는 중괄호로 묶고 키 - 값 쌍을 포함합니다.
{ "key1": "value1", "key2": "value2", ... }
키는 유효한 문자열이어야하며 큰 따옴표로 묶어야합니다. 값은 JSON 객체, 숫자, 문자열, 배열 또는 다음 리터럴 이름 중 하나 ( false
, null
또는 true
있습니다. 키 - 값 쌍에서 키는 콜론 값과 구분됩니다. 여러 키 - 값 쌍은 쉼표로 구분됩니다.
객체의 순서는 중요하지 않습니다. 따라서 다음 JSON 객체는 위와 같습니다.
{ "key2": "value2", "key1": "value1", ... }
모든 것을 요약하면 다음은 유효한 JSON 객체의 예입니다.
{
"image": {
"width": 800,
"height": 600,
"title": "View from 15th Floor",
"thumbnail": {
"url": "http://www.example.com/image/481989943",
"height": 125,
"width": 100
},
"visible": true,
"ids": [116, 943, 234, 38793]
}
}
JSON 객체의 일반적인 예 (관련 객체 (Java) 객체)
이 예제에서 JSON에 직렬화되는 'root'객체는 다음 클래스의 인스턴스라고 가정합니다.
public class MyJson {
}
예제 1 : MyJson
인스턴스의 예 :
{}
즉, 클래스에는 필드가 없으므로 중괄호 만 직렬화됩니다. 중괄호는 객체를 나타내는 일반적인 구분 기호 입니다. 또한 루트 객체가 키 - 값 쌍으로 직렬화되지 않는 방법에 유의하십시오. 이것은 (외부) 객체의 필드가 아닌 간단한 유형 (문자열, 숫자, 배열)에도 해당됩니다.
예제 2 : MyJson
필드를 추가하고 몇 가지 값으로 필드를 초기화하십시오.
// another class, useful to show how objects are serialized when inside other objects
public class MyOtherJson {}
// an enriched version of our test class
public class MyJson {
String myString = "my string";
int myInt = 5;
double[] myArrayOfDoubles = new double[] { 3.14, 2.72 };
MyOtherJson objectInObject = new MyOtherJson();
}
다음은 관련 JSON 표현입니다.
{
"myString" : "my string",
"myInt" : 5,
"myArrayOfDoubles" : [ 3.14, 2.72 ],
"objectInObject" : {}
}
모든 필드가 키 - 값 구조에서 어떻게 직렬화되는지 주목하십시오. 여기서 키는 값을 보유하는 필드의 이름입니다. 배열의 공통 구분 기호는 대괄호입니다. 또한 각 키 - 값 쌍 뒤에는 마지막 쌍을 제외하고 쉼표가옵니다.
JSON 배열
JSON 배열은 값의 정렬 된 컬렉션입니다. 그것은 대괄호 즉 []
로 둘러싸여 있으며 값은 쉼표로 구분됩니다.
{ "colors" : [ "red", "green", "blue" ] }
JSON 배열에는 다음 두 객체 (RFC 문서에서 가져온 배열)의 예제와 같이 객체를 포함하여 유효한 JSON 요소가 포함될 수도 있습니다.
[
{
"precision": "zip",
"Latitude": 37.7668,
"Longitude": -122.3959,
"Address": "",
"City": "SAN FRANCISCO",
"State": "CA",
"Zip": "94107",
"Country": "US"
},
{
"precision": "zip",
"Latitude": 37.371991,
"Longitude": -122.026020,
"Address": "",
"City": "SUNNYVALE",
"State": "CA",
"Zip": "94085",
"Country": "US"
}
]
혼합 된 유형의 요소도 포함 할 수 있습니다. 예를 들면 다음과 같습니다.
[
"red",
51,
true,
null,
{
"state": "complete"
}
]
JSON 배열 (및 객체)을 작성할 때 일반적인 실수는 마지막 요소 뒤에 쉼표를 남겨 두는 것입니다. 이것은 많은 언어에서 일반적인 패턴이지만 유감스럽게도 JSON에서는 유효하지 않습니다. 예를 들어 다음 배열은 유효하지 않습니다.
[
1,
2,
]
이것을 유효하게하려면, 마지막 요소 다음에 쉼표를 제거하여 그것을 켤 필요가 있습니다.
[
1,
2
]
손으로 JSON 편집하기
JSON은 매우 엄격한 형식입니다 ( http://json.org 참조 ) . 따라서 기계를 파싱하고 작성할 수 있지만 눈에 띄지 않는 실수로 인해 문서가 손상 될 경우 사람을 놀라게 할 수 있습니다.
일반적인 문제
후행 쉼표
대부분의 프로그래밍 언어와 달리 후행 쉼표를 추가 할 수 없습니다.
{
a: 1,
b: 2,
c: 3
}
3
이후에 쉼표를 추가하면 synax 오류가 발생합니다.
배열에도 동일한 문제가 있습니다.
[
1,
2
]
항목을 재정렬해야 할 경우 특별히주의해야합니다.
누락 쉼표
{
a: 1,
b: 2,
c: 3
d: 4
}
후행 쉼표는 허용되지 않으므로 새 값을 추가하기 전에 하나를 추가하는 것을 잊을 수 있습니다 (이 경우 3
이후).
코멘트
JSON은 데이터 교환 형식이므로 주석을 허용하지 않습니다. 이것은 아직 사용하지 않는 것 이외의 분명한 해답이 없어도 여전히 중요한 주제입니다.
몇 가지 해결 방법이 있습니다.
- C 스타일 주석을 사용하고, 파서에 전달하기 전에 주석을 제거하십시오
- 데이터에 주석 삽입
{
"//": "comment",
"data": 1
}
- 댓글을 포함하고 데이터로 덮어 씁니다.
{
"data": "comment",
"data": 1
}
두 번째 data
항목은 대부분의 파서 에서 주석 을 덮어 씁니다.
솔루션
JSON을 쉽게 작성하려면 구문 오류를 확인하고 구문 색을 제공하는 IDE를 사용하십시오. 대부분의 편집자는 플러그인을 사용할 수 있습니다.
애플리케이션과 툴을 개발할 때는 JSON을 내부적으로 그리고 프로토콜로 사용하되, 사람이 손으로 직접 편집해야하는 곳 (디버깅 제외)에 노출시키지 않도록하십시오.
다음과 같이이 용도에 더 적합한 다른 형식을 평가하십시오.
Array 대 객체의 이론적 근거 (즉, 무엇을 사용해야하는지)
JSON 배열은 객체의 컬렉션을 나타냅니다. JS에서는 slice
, pop
, push
와 같은 컬렉션 기능을 제공합니다. 객체에는 원시 데이터가 더 많이 있습니다.
JSONArray 는 정렬 된 값의 시퀀스입니다. 외부 텍스트 형식은 값을 구분하는 쉼표로 대괄호로 묶은 문자열입니다.
JSONObject 는 정렬되지 않은 이름 / 값 쌍 모음입니다. 외부 양식은 이름과 값 사이의 콜론과 값과 이름 사이의 쉼표가있는 중괄호로 묶은 문자열입니다.
Object - 키와 값, Array - 숫자, 문자열, 불린입니다. 언제 이것을 사용합니까?
배열은 "is a / an", Object는 "a"라고 생각할 수 있습니다. 예를 들어 "Fruit"을 사용할 수 있습니다. 과일 배열의 모든 항목은 과일의 한 유형입니다.
array fruit : [orange, mango, banana]
배열에는 객체, 문자열, 숫자, 배열이 포함될 수 있지만 객체와 배열 만 처리 할 수 있습니다.
array fruit : [orange:[], mango:{}, banana:{}]
. 오렌지색도 배열임을 알 수 있습니다. 그것은 주황색으로가는 모든 항목이 주황색 유형이라고 말합니다 : bitter_orange, mandarin, sweet_orange.
과일 개체의 경우 그 안에있는 모든 항목은 과일의 특성입니다. 따라서 과일에는
object fruit :{seed:{}, endocarp:{},flesh:{}}
이것은 또한 시드 객체 내의 모든 것이 seed의 속성이어야 함을 의미합니다 (예 : color, ..).
JSON은 기본적으로 자바 스크립트 객체를 문자열로 직렬화 할 수있는 언어입니다. 따라서 JSON 문자열을 deserialize 할 때 javascript 객체 구조를 가져와야합니다. json이 object1에 100 개의 객체를 저장하는 객체로 deserialize하면 object100에 매우 불편할 것입니다. 대부분의 디시리얼라이저는 알려진 객체 및 알려진 객체의 배열을 가져야하므로 문자열을 사용중인 언어의 실제 객체 구조로 변환 할 수 있습니다. 또한 이것은 객체 지향 디자인의 철학이 당신에게 대답 할 것이라는 질문입니다.
모든 참여자에게 크레딧 JSON 배열과 JSON 객체의 차이점은 무엇입니까?