如何从包含数组的StringJSON中获取java中JSON对象的String[]数组而不进行修改



我的控制器中有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"
}

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

你"只"需要:

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

请参见此处。

在您的案例中,您只使用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);
}
}

最新更新