JSON이란 무엇인가요?
자바스크립트 객체 표기법.
JSON은 경량 데이터 교환 형식입니다. JSON 형식 파일의 내부는 다음과 같습니다.
{ "name": "hanzichi", "sex": "male" }
모두 키-값 키처럼 보입니다. 예, js처럼 보입니다. 개체죠? 그렇긴 한데, 동시에 JSON은 js 객체와 똑같이 보일 수 없다는 불만을 표시했습니다. 나만의 개성이 있어야 하므로 키-값 쌍의 키에는 큰따옴표를 사용해야 한다고 규정되어 있습니다! 동시에 키-값 쌍의 값에 대한 특정 요구 사항이 있습니다.
JSON 값은 다음과 같습니다.
숫자(정수 또는 부동 소수점 숫자)
문자열(큰따옴표 안)
논리값(true 또는 false)
배열(대괄호 안)
객체(중괄호 안)
null
위 6가지 유형 외에는 js와 같은 undefine이나 NAN이 없고 JSON은 사용을 거부합니다.
JSON을 어떻게 사용하나요?
JSON은 일반적으로 데이터 상호작용 과정에서 문자열 형태로 이동하므로 js의 경우 json 문자열과 js 객체를 서로 변환하는 방법이 특히 중요합니다.
eval 메소드(json 문자열 -> js 객체)
var jsonStr = '{"name": "hanzichi", "sex": "male"}'; var ans = eval('(' + jsonStr + ')'); console.log(ans.name, ans.sex); // hanzichi male
eval 함수는 매우 빠르지만 모든 javascirpt 코드를 컴파일할 수 있으므로 보안 문제가 발생할 수 있습니다. eval의 사용은 들어오는 코드 매개 변수가 신뢰할 수 있다는 가정을 기반으로 합니다. 어떤 경우에는 클라이언트를 신뢰할 수 없습니다. 보안을 고려한다면 JSON 파서를 사용하는 것이 가장 좋습니다. JSON 파서는 JSON 텍스트만 허용하므로 다음과 같이 더 안전합니다.
JSON.parse(json 문자열 -> js 객체)
var jsonStr = '{"name": "hanzichi", "sex": "male"}'; var obj = JSON.parse(jsonStr); console.log(typeof obj, obj); // object Object {name: "hanzichi", sex: "male"}
두 번째 매개변수는 함수일 수 있으며 값은 삭제할 수 있습니다.
var jsonStr = '{"name": "hanzichi", "sex": "male", "age": 10}'; var obj = JSON.parse(jsonStr, function(key, value) { if(key === 'name') { return 'my name is ' + value; } return value; }); console.log(typeof obj, obj); // object Object {name: "my name is hanzichi", sex: "male", age: 10}
JSON.stringify (js 객체 -> json 문자열)
var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj); console.log(jsonStr); // {"name":"hanzichi","sex":"male","age":"10"}
매개변수를 추가하여 json 문자열로 변환해야 하는 속성을 지정할 수도 있습니다(배열 형식에서는 js 객체 속성이 다음과 같습니다). 배열과 동일한 이름이 변환됩니다):
var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, ['name']); console.log(jsonStr); // {"name":"hanzichi"}
두 번째 매개변수도 함수일 수 있으며, 조건을 충족하는 속성을 삭제하거나 변경할 수 있습니다. 속성 값, 반환 없음은 속성을 포기한다는 의미입니다. 반환 값은 json 문자열의 키 값을 나타냅니다.
var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, function(key, value) { if(key === 'name') { return 'my name is ' + value; } return value; }); console.log(jsonStr); // {"name":"my name is hanzichi","sex":"male","age":"10"}
숫자가 될 수 있는 세 번째 매개 변수도 있을 수 있습니다. 또는 문자열.
숫자일 경우 들여쓰기를 의미하며, 10을 초과하면 10으로 처리됩니다.
var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, null, 4); console.log(jsonStr); // { // "name": "hanzichi", // "sex": "male", // "age": "10" // }
도 문자열일 수 있습니다. 이러한 문자열은 속성 앞에 접두사로 추가됩니다. 마찬가지로 문자열 길이가 10을 초과하면 10만 차단됩니다.
var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, null, 'pre'); console.log(jsonStr); // { // pre"name": "hanzichi", // pre"sex": "male", // pre"age": "10" // }
요약
물론 전설적인 ie8(및 그 이하)에서는 일부 결함으로 인해 JSON.parse() 및 JSON.stringify() 메서드를 사용할 수 없으며 eval()이 나타납니다. 안전하지 않으려면 json2.js를 인용하면 됩니다.