为什么解析这个JSON会抛出错误?

时间:2015-11-01 02:24:41

标签: java

我正在尝试解析此JSONObject

{
    "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)

你能告诉我如何解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

它对类型的严格,getString("Rate")不是一个字符串,而是一个数字。要获取数字值,请使用getDouble("rate")。您还可以使用get("rate")的类型安全获取,该类型应返回Double,然后在其上调用toString()

答案 1 :(得分:1)

试试这个

.getDouble("Rate")

而不是

.getString("Rate")

费率是双倍而不是字符串

答案 2 :(得分:0)

堆栈跟踪显然不明显吗? Rate不是字符串,而是整数。您应该使用getIntgetNumber或Java中调用的任何内容,而不是getString