>  기사  >  웹 프론트엔드  >  JSON 시작 가이드 json을 이해하고 싶은 친구는 read_json을 참조하세요.

JSON 시작 가이드 json을 이해하고 싶은 친구는 read_json을 참조하세요.

WBOY
WBOY원래의
2016-05-16 18:47:46964검색

XML이 플랫폼 간 및 언어 간 이점을 갖는 방법에 대한 많은 홍보가 있지만 웹 서비스에 적용하지 않는 한 일반 웹 응용 프로그램에서 개발자는 XML이 생성되었는지 여부에 관계없이 XML을 구문 분석하는 데 어려움을 겪는 경우가 많습니다. 서버 측 XML을 처리하거나 JavaScript를 사용하여 XML을 구문 분석하는 클라이언트는 종종 코드가 복잡해지고 개발 효율성이 극도로 낮아집니다. 실제로 대부분의 웹 애플리케이션에서는 데이터를 전송하기 위해 복잡한 XML이 전혀 필요하지 않으며 XML의 확장성은 거의 이점이 없으며 많은 AJAX 애플리케이션은 동적 웹 페이지를 구축하기 위해 HTML 조각을 직접 반환하기도 합니다. XML을 반환하고 구문 분석하는 것과 비교할 때 HTML 조각을 반환하면 시스템의 복잡성이 크게 줄어들지만 어느 정도의 유연성도 부족합니다.
JSON은 이제 웹 애플리케이션 개발자에게 대체 데이터 교환 형식을 제공합니다. JSON이 정확히 무엇인지 살펴보겠습니다. JSON은 XML이나 HTML 조각보다 더 큰 단순성과 유연성을 제공합니다.
Ajax 리소스 센터
문서, 튜토리얼, 포럼, 블로그, 위키, 뉴스 등 Ajax 프로그래밍 모델에 대한 정보를 한 곳에서 볼 수 있는 원스톱 센터인 Ajax 리소스 센터를 방문하세요. Ajax에 대한 새로운 정보는 여기에서 확인할 수 있습니다.
JSON 데이터 형식 분석
JSON도 XML과 마찬가지로 일반 텍스트를 기반으로 하는 데이터 형식입니다. JSON은 본질적으로 JavaScript용으로 준비되어 있으므로 JSON을 사용하여 간단한 문자열, 숫자, 부울, 배열 또는 복잡한 개체를 전송할 수 있습니다.
문자열, 숫자, 부울은 JSON으로 표현하기가 매우 간단합니다. 예를 들어 JSON을 사용하여 간단한 문자열 "abc"를 나타내는 경우 해당 형식은 다음과 같습니다.
"abc"
문자 ",, / 및 일부 제어 문자(, f, , , )를 인코딩해야 하며, 다른 유니코드 문자를 직접 출력할 수 있습니다. 다음 그림은 문자열의 전체 표현 구조입니다.
그림 1. 문자열의 전체 표현 구조
숫자는 정수 또는 부동 소수점 수에 따라 다음과 같이 표현할 수 있습니다.
그림 2. 숫자의 표현 구조
이것은 대부분의 프로그래밍 언어의 표현 방법과 일치합니다. 예:
12345(정수)
-3.9e10(부동 소수점 수)
부울 유형은 true로 표현됩니다. 또는 거짓. 또한 JavaScript에서 null은 null로 표시됩니다. true, false 및 null에는 큰따옴표가 없으며, 그렇지 않으면 문자열로 처리됩니다.
JSON은 []를 사용하여 모든 요소를 ​​포함하고 각 요소는 쉼표로 구분되어 배열 객체를 나타낼 수도 있으며 요소는 임의의 값일 수 있습니다. 예를 들어 다음 배열에는 문자열, 숫자, 부울 및 null이 포함됩니다.
["abc",12345,false,null]
객체 객체는 일련의 정렬되지 않은 키-값 쌍을 포함하는 {}로 JSON에서 표현됩니다. 실제로 여기서 객체는 Java의 객체와 동일합니다. Java의 클래스가 아닌 Map Key는 String으로만 표현할 수 있습니다.
예를 들어 주소 개체에는 다음 키-값이 포함됩니다.
city:Beijing
street:Chaoyang Road
postcode:100025(정수)
JSON으로 다음과 같이 표시됩니다.
{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
값은 다른 개체 또는 배열일 수도 있습니다. 따라서 복잡한 개체를 중첩하여 다음을 나타낼 수 있습니다. Person 객체는 다음과 같이 표현될 수 있는 이름 및 주소 객체를 포함합니다:
{"name":"Michael","address":
{"city":"Beijing","street":" Chaoyang Road ","postcode" :100025}
}
JSON 데이터를 처리하는 JavaScript
위에서는 JSON을 사용하여 데이터를 표현하는 방법을 소개했습니다. 다음으로 생성 방법도 해결해야 합니다. 클라이언트로 전송하기 위한 서버 측의 JSON 형식 데이터 및 클라이언트가 JavaScript를 사용하여 JSON 형식 데이터를 처리하는 방법.
먼저 JavaScript를 사용하여 웹페이지에서 JSON 데이터를 처리하는 방법을 살펴보겠습니다. 클라이언트가 간단한 JavaScript 메서드를 통해 사용자에게 JSON 데이터를 어떻게 나타내는지 확인할 수 있습니다.
function handlerJson() {
var j={"name":"Michael","address":
{" city":"Beijing","street":" 조양로 ","우편번호":100025}
};
document.write(j.name);
document.write(j .address. city);
}
서버에서 반환된 JSON 데이터가 위와 같다고 가정합니다.
{"name":"Michael","address":
{"city":"Beijing " ,"street":" Chaoyang Road ","postcode":100025}
}
JavaScript 변수에 할당하기만 하면 해당 변수를 즉시 사용하고 페이지의 정보를 업데이트할 수 있습니다. XML과 비교하면 됩니다. DOM에서 다양한 노드를 읽습니다. JSON을 사용하는 것은 매우 쉽습니다. 우리가 해야 할 일은 Ajax 요청을 보내고 서버에서 반환된 JSON 데이터를 변수에 할당하는 것뿐입니다. 이미 JSON 데이터를 처리하는 기능을 포함하는 Ajax 프레임워크가 많이 있습니다. 예를 들어 Prototype(인기 있는 JavaScript 라이브러리: http://prototypejs.org)은 evalJSON() 메서드를 제공합니다. 서버를 JavaScript 변수로 변환합니다.
new Ajax.Request("http://url", {
method: "get",
onSuccess: function(transport) {
var json = 전송 .responseText.evalJSON() ;
// TODO: document.write(json.xxx);
}
})
서버측에 JSON 형식 데이터 출력
서버에서 JSON 형식으로 데이터를 출력하는 방법에 대해 논의해 보겠습니다.Java를 예로 들어 Java 객체를 JSON 형식의 텍스트로 인코딩하는 방법을 보여 드리겠습니다.
문자열 개체를 JSON 형식으로 인코딩하는 경우 특수 문자만 처리하면 됩니다. 또한 문자열은 (') 대신 (")로 표현해야 합니다.

코드 복사 코드는 다음과 같습니다.

static String string2Json(String s) {
StringBuilder sb = new StringBuilder(s.length() 20);
sb.append('"');
for ( int i=0 ; ichar c = s.charAt(i)
스위치(c) {
case '"':
sb. Append("\ "");
break;
case '\':
sb.append("\\");
break;
case '/':
sb.append("\/");
break;
case 'b':
sb.append("\b")
break; 🎜>sb.append("\f");
break
case 'n':
sb.append("\n")
case 'r' :
sb.append("\r");
break;
case 't':
sb.append("\t");
break;
sb .append(c);
}
}
sb.append('"');
return sb.toString();
}


Number를 JSON으로 표현하는 것이 훨씬 쉽습니다. Java의 다형성을 사용하면 Integer, Long, Float 등 다양한 Number 형식을 처리할 수 있습니다.



코드 복사
코드는 다음과 같습니다. static String number2Json(Number number) { return number.toString()}

부울 유형 toString() 메서드를 통해 직접 JSON 표현을 가져올 수도 있습니다.



코드 복사
코드 static String boolean2Json(Boolean bool) { return bool.toString(); }

배열을 JSON으로 인코딩하려면 형식을 사용하는 경우 루프를 통해 각 요소를 인코딩할 수 있습니다.



코드 복사
코드는 다음과 같습니다.static String array2Json(Object[] array) { if (array.length==0) return "[]";
StringBuilder sb = new StringBuilder(array.length << 4 );
sb.append('[');
for (Object o : array) {
sb.append(toJson(o))
sb.append(',');
}
// 마지막 ' ,'를 추가하면 ']'가 됩니다.
sb.setCharAt(sb.length()-1, ']')
return sb.toString();
}


마지막으로 Map를 JSON 형식으로 인코딩해야 합니다. 왜냐하면 JavaScript의 Object는 실제로 Java의 Map에 해당하기 때문입니다.



코드 복사
코드는 다음과 같습니다. static String map2Json (Map map) { if (map.isEmpty()) return "{}"
StringBuilder sb = new StringBuilder(map.size() << 4) ;
sb .append('{');
Set 키 = map.keySet()
for(String key:keys) {
객체 값 = map.get(key) );
sb.append('"');
sb.append(key);
sb.append('"')
sb.append(':'); >sb.append( toJson(value));
sb.append(',');
}
// 마지막 ','를 '}'로 변경:
sb.setCharAt( sb.length( )-1, '}');
return sb.toString();
}


모든 Java 객체를 균일하게 처리하기 위해 입력 메서드를 작성합니다. toJson(Object), 모든 Java 객체를 JSON 형식으로 인코딩할 수 있습니다:



코드 복사

코드는 다음과 같습니다. public static String toJson(Object o) { if (o==null) return "null"; if (o instanceof String)
return string2Json((String )o);
if (o 인스턴스 of Boolean)
return boolean2Json((Boolean)o)
if (o 인스턴스 of Number)
return number2Json((Number)o); (o 인스턴스of Map)
return map2Json((Map)o)
if (o 인스턴스of Object[])
return array2Json((Object[])o); throw new RuntimeException("지원되지 않는 유형: " o.getClass().getName())
}


Java 객체에 대해서는 엄격한 검사를 수행하지 않습니다. 지원되지 않는 개체(예: List)는 RuntimeException을 직접 발생시킵니다. 또한 출력 JSON이 유효한지 확인하기 위해 Map 개체의 Key에는 특수 문자가 포함될 수 없습니다. 주의깊은 독자라면 순환 참조 객체가 무한 재귀를 일으킬 수 있다는 사실을 발견할 수도 있습니다. 예를 들어 순환 참조 맵을 주의 깊게 구성하면 StackOverflowException이 감지될 수 있습니다.
코드 복사 코드는 다음과 같습니다.

@Test(expected=StackOverflowError.class)
public void testRecurrsiveMap2Json() {
Map = new HashMap();
map.put("key", map)
JsonUtil.map2Json(map)
}

서버가 이를 처리합니다. JSON 데이터는 결국 간단한 JavaScript 개체로 변환되어야 하므로 재귀 참조 가능성은 희박합니다.
마지막으로 Servlet이나 MVC 프레임워크를 통해 JSON을 출력할 때 올바른 MIME 유형(application/json)과 문자 인코딩을 설정해야 합니다. 서버가 UTF-8 인코딩을 사용한다고 가정하면 다음 코드를 사용하여 인코딩된 JSON 텍스트를 출력할 수 있습니다.
코드 복사 코드는 다음과 같습니다:

response.setContentType("application/json;charset=UTF-8")
response.setCharacterEncoding("UTF-8")
PrintWriter pw = response.getWriter() ;
pw.write(JsonUtil.toJson(obj));
pw.flush();

요약
JSON은 자바스크립트 표준. 현재 주류 브라우저는 JSON을 완벽하게 지원합니다. JSON을 사용하면 Ajax를 사용하는 Web 2.0 웹사이트의 경우 JSON은 현재 가장 유연하고 가벼운 솔루션입니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.