【问题标题】:Parsing String to JsonObject using GSON gives IllegalStateException: This is not a JSON Object使用 GSON 将字符串解析为 JsonObject 会给出 IllegalStateException:这不是 JSON 对象
【发布时间】:2011-09-22 09:08:15
【问题描述】:

我有以下代码:

JsonParser parser = new JsonParser();
System.out.println("gson.toJson: "  + gson.toJson(roomList));
JsonObject json2 = parser.parse("{\"b\":\"c\"}").getAsJsonObject();
System.out.println("json2: " + json2);
JsonObject json = parser.parse(gson.toJson(roomList)).getAsJsonObject();
System.out.println("json: " + json);

它给了我以下输出:

gson.toJson: [{"id":"8a3d16bb328c9ba201328c9ba5db0000","roomID":9411,"numberOfUsers":4,"roomType":"BigTwo"},{"id":"402881e4328b9f3a01328b9f3bb80000","roomID":1309,"numberOfUsers":4,"roomType":"BigTwo"},{"id":"402881e4328ba09101328ba09edd0000","roomID":1304,"numberOfUsers":4,"roomType":"BigTwo"},{"id":"402881e4328bb83601328bb8af640000","roomID":4383,"numberOfUsers":4,"roomType":"BigTwo"},{"id":"402881e4328bb83601328bd271fe0001","roomID":5000,"numberOfUsers":4,"roomType":"BigTwo"},{"id":"402881e4328bb83601328bd2e0e30002","roomID":2485,"numberOfUsers":4,"roomType":"BigTwo"},{"id":"402881e4328bb83601328bd3087b0003","roomID":6175,"numberOfUsers":4,"roomType":"BigTwo"},{"id":"402881e4328bb83601328bd35a840004","roomID":3750,"numberOfUsers":4,"roomType":"BigTwo"},{"id":"402881e4328bb83601328bd366250005","roomID":370,"numberOfUsers":4,"roomType":"BigTwo"},{"id":"402881e4328bb83601328bd3807d0006","roomID":9477,"numberOfUsers":4,"roomType":"BigTwo"}]
json2: {"b":"c"}
java.lang.IllegalStateException: This is not a JSON Object.

有人可以帮我将我的 Json 字符串解析为 JsonObject 吗?我已经检查了http://jsonlint.com/ 我的 json 是有效的。

【问题讨论】:

    标签: java json gson


    【解决方案1】:

    这是因为 JSON 结构.. 我必须先把它放到一个 JSONObject 中,像这样

    JsonObject jsonObj = new JsonObject();
    jsonObj.addProperty(ServerConstants.JSONoutput, gson.toJson(roomList));
    

    然后我会反序列化

     List<RoomData> roomList = gson.fromJson(jsonObj.get(CardGameConstants.JSONoutput).toString(), listType);
                for (RoomData roomData : roomList) {
                    System.out.println(roomData.getRoomID());
                }
    

    【讨论】:

      【解决方案2】:

      这应该会给你一些基本的想法。

      ArrayList<String> roomTypes = new ArrayList<String>();
      
      JSONArray jsonArray = new JSONArray(jsonString);
      
      for(int i =0; i<jsonArray.length(); i++){
          roomTypes.add(jsonArray.getJSONObject(i).getString("roomType"));
      }
      

      【讨论】:

      • 你似乎使用 json-simple 而不是 gson,JsonArray 上的 String 构造函数在 gson 中无效
      【解决方案3】:

      代码的问题在于roomList 不是JsonObject,这在打印输出中很明显。实际上是JsonArray

      要修复代码,请调用.getAsJsonArray()(而不是.getAsJsonObject()

      JsonParser parser = new JsonParser();
      System.out.println("gson.toJson: "  + gson.toJson(roomList));
      JsonObject json2 = parser.parse("{\"b\":\"c\"}").getAsJsonObject();
      System.out.println("json2: " + json2);
      JsonArray json = parser.parse(gson.toJson(roomList)).getAsJsonArray();
      System.out.println("json: " + json);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多