【问题标题】:com.google.gson.JsonObject cannot be cast to com.google.gson.JsonArray in Javacom.google.gson.JsonObject 无法在 Java 中转换为 com.google.gson.JsonArray
【发布时间】:2019-06-17 13:39:07
【问题描述】:

我正在尝试使用 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
  }
}

编辑:添加代码

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

【问题讨论】:

  • 请在出现上述错误的行中分享您的无效代码。
  • 添加,最后一行给我一个错误。 Json 来自 API,我将它放在缓冲阅读器中。

标签: java json gson


【解决方案1】:

您将在此处获得此行的异常:

JsonArray jArray =  allData.getAsJsonArray("rates");

因为您可以在输入文件中看到 rates 是 JSON 对象而不是 JSON 数组。让我向您展示语法上的差异:

1。作为 JSON 对象的费率(如您的情况):

"rates": { "AED": 3.673021, "ARS": 37.537301}

2。作为 JSON 数组的费率:

"rates": [ {"AED": 3.673021}, {"ARS": 37.537301}]

在第二种情况下,您可以将其作为 JSON 对象的 JSON 数组!我建议阅读JSON W3 Tutorial的DataTypes

好的,现在将输入中的所有内容提取为 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();

【讨论】:

  • 与其将其存储为Set&lt;Map.Entry&lt;String, JsonElement&gt;&gt;,不如将​​其存储在Map&lt;String, JsonElement&gt; 中更有意义。
猜你喜欢
  • 2020-12-13
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
相关资源
最近更新 更多