2015-01-03 7 views
0

자바에서 JSON 파일을 디코딩하는 법을 배우고 있습니다. 이해할 수없는 구문이 있습니다. 나는 또한 자바가 처음이다. 여기에 코드입니다 : 프로그래머에 최선 시도에서자바 구문 : JSONArray array = (JSONArray) obj

Object obj = JSONValue.parse(jsonResult); 
JSONArray array = (JSONArray)obj; 

말, 나는 "JSONArray는"클래스임을 이해합니다. 우리는 새로운 JSONArray를 인스턴스화하고 그것을 "배열"이라고 부릅니다. 우리는 등호의 오른쪽에있는 값으로 "배열"을 초기화합니다.

내 질문은 - 나는 등호 오른쪽에 무슨 일이 일어나고 있는지 이해하지 못한다. "JSONArray"가 괄호 안에있는 이유는 무엇입니까? (JSONArray) obj? 나는 여기서 무슨 일이 일어나고 있는지 이해하지 못한다.

감사합니다.

+0

Java 객체에는 이름이 없습니다. 'array'는 참조이고'obj'는 참조입니다. – immibis

답변

0

수신 JSON은 가장 바깥 쪽 구조로 "개체"(지도) 또는 "배열"(목록) 일 수 있습니다. JSONValue.parse(jsonResult)jsonResult 문자열에서 가장 바깥 쪽 정렬 구조에 따라 JSONObject 또는 JSONArray를 생성합니다. 따라서 parse 메서드는 이러한 두 클래스 중 일부 공통 "조상"을 반환하도록 선언해야합니다. JSON-Simple은 Object가 아닌 두 클래스에 공통된 수퍼 클래스가없는 매우 조잡한 JSON 키트입니다.

아마도이 경우 프로그래머는 수신 된 데이터가 항상 가장 바깥 쪽 구조로 JSON "배열"을 가짐을 알고 있습니다. 그는 처음에 parse의 결과를 Object 참조에두고 (Object는 parse에서 반환 된 형식 유형이므로)이 값을 JSONArray로 캐스팅합니다.

엘리엇 (Eliot)은 적어도 적어도 공식적으로는 instanceof 테스트를 포함하는 것이 좋을 것입니다. 또는 JSON-Simple 이외의 키트를 사용하는 경우 공통된 수퍼 클래스에서 인터페이스를 사용할 수 있습니다. 두 가지 클래스는 해당 유형을 쿼리 할 수있었습니다.

0

이것은 (확인되지 ​​않은) 타입 캐스트의 예입니다. 먼저 유형 비교 연산자 instanceof을 사용하여 확인 된 캐스트를 사용하는 것이 좋습니다. 특정 경우는 항상 JSONArray 당신이

JSONArray array = (JSONArray) JSONValue.parse(jsonResult); 

parse()의 결과 때문에 모든 IS 캐스팅하는 것이 필요 이유처럼 한 줄에 그것을 할 수있을 것입니다

JSONArray array = null; 
Object obj = JSONValue.parse(jsonResult); 
if (obj instanceof JSONArray) { 
    array = (JSONArray)obj; 
} 

뭔가처럼, Object입니다.