2013-09-02 5 views
0

java에서 org.json을 사용하여 json을 구문 분석하고 있습니다.org.json.JSONException : JSONObject [ "address"]가 JSONArray가 아닙니다.

JSONArray jsonarr= json.getJsonObject().getJSONArray("address"); 
String address = jsonarr.getJSONObject(0).getString("addressLine1")); 

을하지만 예외가 있습니다 : 나는 자바 코드에서 데이터를 가져

{ 
    "address": [{ 
    "addressLine1": "Noida", 
    "addressLine2": "UP" 
    }], 
    "firstName": "Achyut", 
    "lastName": "khanna" 
} 

:이 JSONArray로

org.json.JSONException: JSONObject["address"] is not a JSONArray. 
    at org.json.JSONObject.getJSONArray(JSONObject.java:578) 
    at com.altametrics.io.util.test.FNParserUtilTest.testAltaMapToFNJson(FNParserUtilTest.java:513) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

을 인정하지 않은 이유를 같이 내 JSON 보인다? 내가 어디서 잘못한거야?

+1

당신은 확실'json.getJsonObject은()'은'address' 배열을 포함해야 객체를 참조? – Thomas

+0

코드 잔여 부분 표시 – Antoniossss

+0

@Thomas json.getJsonObject()는 JSONObject를 제공하는 래퍼입니다. – Achyut

답변

1

시도 코드 다음

JSONObject json = new JSONObject(str); 

JSONArray jsonarr= json.getJSONArray("address"); 
String address = jsonarr.getJSONObject(0).getString("addressLine1"); 
+0

그래도 작동하지만지도를 만들고 JSONObject 생성자 JSONObject (map)에서지도를 전달하면이 문제가 무엇인지 말해주세요. FNHashMap map = new FNHashMap <>(); \t \t map.put ("firstName", "Achyut"); \t \t map.put ("lastName", "khanna"); \t \t FNHashMap address = new FNHashMap <>(); \t \t address.put ("addressLine1", "Noida"); \t \t address.put ("addressLine2", "UP"); \t \t \t \t \t FNArrayList list = new FNArrayList <>(); \t \t \t \t list.add (address); \t \t map.put ("address", list); – Achyut

+0

예제에서 json.getJsonObject(). getJSONArray ("address")의 "json"변수는 무엇입니까? 당신이 다른 객체를 참조하는 것처럼 보입니다. – olexii

+0

아니요, 새로운 JSONObject (map.toString())를 사용하여 객체를 만들 때 작동하지만, 새로운 JSONString (map)에서는 작동하지 않는 이유는 JSONObject를 반환하는 래퍼 ( – Achyut

관련 문제