Разбор строки в JsonObject с использованием GSON дает исключение IllegalStateException: это не объект JSON - PullRequest
5 голосов
/ 22 сентября 2011

У меня есть следующий код:

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 действителен.

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Это из-за структуры 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());
            }
0 голосов
/ 17 января 2019

Проблема с кодом заключается в том, что 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);
0 голосов
/ 22 сентября 2011

Это должно дать вам основную идею.

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"));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...