2014-01-27 4 views
0

У меня есть следующий код, который использует Java JSON:Java JSON Десериализация Ошибка

Widget w = new Widget(true, "LIVE"); 
WidgetService service = new WidgetServiceImpl(); // 3rd party JSON web service 

JSONObject response = service.postWidget(w); 

System.out.println("Response is: " + response.toString()); 
System.out.println("Now fetching orderid..."); 
System.out.println(response.getString("order_id")); 

Не беспокойтесь о Widget или WidgetService: этот вопрос должен делать с тем, как я использую API Java JSON (и, в частности JSONObject).

Когда я запускаю приведенный выше код, я получаю:

Response is: {"response":{"credits_used":"0.30","job_count":1,"order_id":"243050","currency":"USD"},"opstat":"ok"} 
Now fetching orderid... 
Exception in thread "main" org.json.JSONException: JSONObject["order_id"] not found. 
    at org.json.JSONObject.get(JSONObject.java:473) 
    at org.json.JSONObject.getString(JSONObject.java:654) 
    at com.me.myapp.MyDriver.main(MyDriver.java:49) 

Как вы можете видеть, есть поле Строки order_id возвращается в ответ, и он имеет значение «243050». Так почему я получаю исключение?

+0

OrderID не непосредственно связанный с объектом ответа, он находится в пределах другого объекта – epoch

ответ

2

Ваш JSONObject response указывает на внешний объект json.

Я уверен, что ваш объект ответа имеет свойство "response""opstat" кстати), содержащее ваш ожидаемый объект.

+0

Благодаря @Max Fichtelmann (+1) - так что мне нужно сделать, чтобы исправить это? – AdjustingForInflation

+0

[JSONObject # getJSONObject (String)] (http://www.json.org/javadoc/org/json/JSONObject.html#getJSONObject (java.lang.String)) должен получить внутренний объект ответа, как @dstronczak сказал. –

0

Вы должны сделать это так:

response.getJSONObject("response").getString("order_id"); 
Смежные вопросы