我正在尝试使用 GSON 将“费率”放入 JsonArray 中,但它不起作用,有人可以建议如何将此 JSon 放入 Map、数组或使用 Java 中的 Gson 的类型中吗?
{
"success": true,
"timestamp": 1548277447,
"base": "USD",
"date": "2019-01-23",
"rates": {
"AED": 3.673021,
"ARS": 37.537301,
"AUD": 1.400099,
"BGN": 1.717902,
"BRL": 3.7657,
"BWP": 10.52802,
"CAD": 1.334645,
"CHF": 0.994703,
"CLP": 671.898015,
"CNY": 6.791896,
"COP": 3151.5,
"DKK": 6.559594,
"EGP": 17.891044,
"EUR": 0.878542,
"GBP": 0.76529,
"HKD": 7.84525,
"HRK": 6.530898,
"HUF": 279.43017,
"ILS": 3.673794,
"INR": 71.13502,
"ISK": 120.350185,
"JPY": 109.595496,
"KRW": 1126.589831,
"KZT": 378.239562,
"LKR": 182.190238,
"LTL": 2.95274,
"LVL": 0.60489,
"LYD": 1.390468,
"MXN": 19.0361,
"MYR": 4.13696,
"NOK": 8.56596
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:添加代码
HttpURLConnection fixerConnection = (HttpURLConnection) url.openConnection();
fixerConnection.setRequestMethod("GET");
BufferedReader jsonData = new BufferedReader(new InputStreamReader(fixerConnection.getInputStream()));
JsonObject allData = new JsonParser().parse(jsonData).getAsJsonObject();
JsonArray jArray = allData.getAsJsonArray("rates");//getAsJsonObject("symbol");
Run Code Online (Sandbox Code Playgroud)
您将在此处得到此行的异常:
JsonArray jArray = allData.getAsJsonArray("rates");
Run Code Online (Sandbox Code Playgroud)
因为正如您在输入文件中看到的,速率是一个 JSON 对象而不是 JSON 数组。让我向您展示语法上的差异:
"rates": { "AED": 3.673021, "ARS": 37.537301}
Run Code Online (Sandbox Code Playgroud)
"rates": [ {"AED": 3.673021}, {"ARS": 37.537301}]
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,您可以将其作为 JSON 对象的 JSON 数组获取!我建议阅读JSON W3 教程的数据类型
好的,现在将输入中的所有内容提取为JSON 对象的解决方案
HttpURLConnection fixerConnection = (HttpURLConnection) url.openConnection();
fixerConnection.setRequestMethod("GET");
BufferedReader jsonData = new BufferedReader(new
InputStreamReader(fixerConnection.getInputStream()));
JsonObject allData = new JsonParser().parse(jsonData).getAsJsonObject();
// Now Take Rates as JSON Object and capture it in a Map.
JsonObject rates = allData.getAsJsonObject("rates");
Set<Map.Entry<String, JsonElement>> entries = rates.entrySet();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3092 次 |
| 最近记录: |