2015-11-01 2 views
0

Я пытаюсь разобрать этот JSONObjectПочему разбор этого JSON вызывает ошибку?

{ 
    "query": { 
     "yahoo:count": 1, 
     "results": { 
      "rate": { 
       "Name": "USD/INR", 
       "id": "USDINR", 
       "Time": "12:19pm", 
       "Date": "10/31/2015", 
       "Bid": 65.405, 
       "Ask": 65.43, 
       "Rate": 65.405 
      } 
     }, 
     "yahoo:created": "2015-11-01T02:16:56Z", 
     "yahoo:lang": "en-US", 
     "xmlns:yahoo": "http://www.yahooapis.com/v1/base.rng" 
    } 
} 

Это моя программа

import java.text.ParseException; 
import java.util.ArrayList; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

public class Test { 
    public static void main(String[] args) throws ParseException, JSONException { 

     String json = "{\"query\":{\"yahoo:count\":1,\"results\":{\"rate\":{\"Name\":\"USD/INR\",\"id\":\"USDINR\",\"Time\":\"12:19pm\",\"Date\":\"10/31/2015\",\"Bid\":65.405,\"Ask\":65.43,\"Rate\":65.405}},\"yahoo:created\":\"2015-11-01T02:16:56Z\",\"yahoo:lang\":\"en-US\",\"xmlns:yahoo\":\"http://www.yahooapis.com/v1/base.rng\"}}"; 

     JSONObject json_obj = new JSONObject(json); 

     String Rate = json_obj.getJSONObject("query").getJSONObject("results") 
       .getJSONObject("rate").getString("Rate"); 

     System.out.println(Rate); 

    } 

} 

Exception in thread "main" org.json.JSONException: JSONObject["Rate"] not a string. 
    at org.json.JSONObject.getString(JSONObject.java:644) 
    at Test.main(Test.java:16) 

Не могли бы вы, пожалуйста, дайте мне знать, как решить эту проблему ??

+0

что ошибка? –

+0

JSONObject ["Rate"] не строка. , вставил след стека исключений, о котором идет речь. – Kiran

ответ

1

Его строгий характер, getString("Rate") не является строкой своего номера. Чтобы получить числовое значение, используйте getDouble("rate"). Вы также можете использовать безопасный тип типа get("rate"), который должен вернуть Double, а затем позвонить toString().

+0

Большое вам спасибо, все ли JSON Parsers работают так или есть какая-то синтаксическая структура, которая может управлять этими вещами ?? – Kiran

+0

@Kiran Каждая структура JSON должна иметь способ обработки множества типов значений, предоставляемых JSON. Например, вы можете просто использовать 'set (value)' для всего, потому что существует несколько способов представления значения в JSON. Например, с номерами '{value:" 1.5 "}' не совпадает с '{значение: 1.5}'. Реализация json.org обрабатывает это так же хорошо, как и любой другой. Если вы не хотите иметь дело с типами, просто используйте общее 'get (value)' и обрабатывайте примитивы типа объекта. Есть ли способ доступа к данным, которые вам не нравятся с этой реализацией? –

0

Не очевидна ли трассировка стека? Rate - это не строка, а целое число. Вы должны использовать getInt или getNumber или все, что вызывается в Java, а не getString.

1

Try как этот

.getDouble("Rate") 

вместо

.getString("Rate") 

скорости вдвое не строка

Смежные вопросы