有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何从包含数组的字符串JSON中获取java中JSON对象的字符串[]数组,而无需修改

我的控制器中有String jsonObject。结构如下:

{ "cats":
    [
        {
  "name": "Smoky",
  "age": 12,
  "color": "gray"
},
        {
  "name": "Oscar",
  "age": 3,
  "color": "black"
},
       {
  "name": "Max",
  "age": 4,
  "color": "white"
}
    ]
}

我需要将其解析为String[] jsonObjectsList<String> jsonObjects
使用GSON我试图这样做:

public static String[] toArray(String json) {
        final String PARSING_ERROR = "Error while parsing json to string array";
        try {
            JsonObject jsonObject = new Gson().fromJson(json, JsonObject.class);
            String tableName = jsonObject.keySet().toArray()[0].toString();
            JsonArray jsonArray = jsonObject.getAsJsonArray(tableName);
            String[] strings = new String[jsonArray.size()];
            for (int i = 0; i < jsonArray.size(); i++) {
                String stringJson = jsonArray.get(i).toString();
                strings[i] = stringJson;
            }
            return strings;
        } catch (Exception e) {
            System.err.println(PARSING_ERROR);
            throw new DataException(PARSING_ERROR);
        }
    }

它可以工作,但解析后我收到以下字符串:

{"name":"Smoky","age":12,"color":"gray"}

如何获取以下格式的字符串:

{
  "name": "Smoky",
  "age": 12,
  "color": "gray"
}

共 (2) 个答案

  1. # 1 楼答案

    抱歉,这不是PO问题的正确答案,但可能对其他用户有帮助。。。谁想用GSON(漂亮地)序列化对象,所以String jsonOutput = gson.toJson(someObject);

    你“只是”需要:

    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    String jsonOutput = gson.toJson(jsonObject);
    

    See here

  2. # 2 楼答案

    在您的情况下,您只使用GSON从JSON中读取(反序列化):

    JsonObject jsonObject = new Gson().fromJson(json, JsonObject.class);
    

    对于结果String[]及其输出,您的程序负责

    。。。如果你不想重新发明轮子,当你喜欢“漂亮”的格式时;既然GSON“在船上”,你可以做:

    public static String[] toArray(String json) {
        final String PARSING_ERROR = "Error while parsing json to string array";
        // one for toJson() (only)
        final Gson gsonPretty = new GsonBuilder().setPrettyPrinting().create();
        // one for fromJson (demo only)
        final Gson gsonUgly = new Gson();
        try {
            JsonObject jsonObject = gsonUgly.fromJson(json, JsonObject.class);
            String tableName = jsonObject.keySet().toArray()[0].toString();
            JsonArray jsonArray = jsonObject.getAsJsonArray(tableName);
            String[] strings = new String[jsonArray.size()];
            for (int i = 0; i < jsonArray.size(); i++) {
                // de-serialize & then pretty serialize each "cat".
                String catJson = jsonArray.get(i).toString();
                JsonObject catObj = gsonUgly.fromJson(catJson, JsonObject.class);
                strings[i] = gsonPretty.toJson(catObj);
            }
            return strings;
        } catch (Exception e) {
            System.err.println(PARSING_ERROR);
            throw new DataException(PARSING_ERROR);
        }
    }