【问题标题】:read JsonObject Java阅读 JsonObject Java
【发布时间】:2018-03-05 12:43:35
【问题描述】:

我像这样从另一台服务器获取 JsonObject:

{"data": {
 "key": "Cooking.Oven.Program.HeatingMode.HotAir",
    "options": [
      {
        "key": "Cooking.Oven.Option.SetpointTemperature",
        "value": 230,
        "unit": "°C"
      },
      {
        "key": "BSH.Common.Option.Duration",
        "value": 1200,
        "unit": "seconds"
      }
    ]
  }
}

我的问题是现在。如何将此 JsonObject 分成较小的部分。 如果这将是具有一个键值对的普通对象,我会将其转移到地图中。但是这里有一行

Map<String, String> map = toMap(this.json);

 private Map<String, String> toMap(JsonObject json) {
    return new Gson().fromJson(json, new TypeToken<HashMap<String, String>>() {
    }.getType());
 }

抛出错误

Exception occurred while informing handler: java.lang.IllegalStateException: Expected STRING but was BEGIN_ARRAYcom.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected STRING but was BEGIN_ARRAY

将所有条目获取到地图的最简单解决方案是什么? 你对我有什么提示或线索吗?

【问题讨论】:

  • 您尚未发布您的toMap 代码,但错误消息似乎不言自明。
  • 你的问题是你试图映射到字符串,但是你的json中的数据不是字符串,而是复合对象
  • 你可以试试Map&lt;String, Object&gt;
  • 谢谢! Map 和函数 .toString() 的结合解决了我的问题。

标签: java json


【解决方案1】:

试试这个:

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

    //... get JSON string
    String jsonResponse = yourJsonResponseString;

    // parse JSON
    JSONObject jsonObject = new JSONObject (jsonResponse);
    JSONObject data = jsonObject.getJSONObject("data");
    String key = data.getString("key");
    JSONArray options = data.getJSONArray("options");
    for(i=0; i<options.length(); i++){
      JSONObject optionsObject = options.getJSONObject(i);
      String key = optionsObject.getString("key");
      int value = optionsObject.getInt("value");
      String unit = optionsObject.getString("unit");
      // ... put these values into some object or store it somehow..
    }

因此,首先您必须将 JSON 中的值转换为 String、int 等。然后您可以将这些值添加到您的自定义数据结构中。 希望能帮到你。

【讨论】:

  • 感谢您的回答。我稍后会尝试。
  • 我用另一种方式解决了这个问题。请参阅上面的 cmets。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 2021-01-16
  • 2014-07-11
  • 1970-01-01
相关资源
最近更新 更多