未命名的json数组转换为java [英] unnamed json array into java

查看:97
本文介绍了未命名的json数组转换为java的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下字符串:

"[{\"type\":\"string\",\"value\":\"value1\",\"field\":\"label\"},
    {\"type\":\"string\",\"value\":\"value2\",\"field\":\"address_unique\"}]"

我想把它变成java GSON JsonObject数组/列表,以便调用类似于:

and I want to turn this into java GSON JsonObject array/list in order to invoke something like:

myJsonObjs[i].getAsJsonPrimitive("value").getAsString();

达到此目的的最短路径是什么?我尝试设置一个这样的bean:

What is the shortest path to achieve this? I tried setting up a bean like this:

public static class Filter {
    @SerializedName("type")
    private String type;
    @SerializedName("value")
    private String value;
    @SerializedName("field")
    private String field;

    //getters, setters and ctor
}

但是我找不到使用JsonParser或Gson将上面的字符串反序列化到此bean的数组/列表中的方法。特别是我试过

but I cannot find a way to deserialize the string above into an array/list of this bean using JsonParser or Gson. In particular I tried

Gson gson = new Gson();
gson.fromJson(json_string, Filter[].class);

(其中 json_string 是上面的字符串)但这给了我一个

(where json_string is the string above) but this gives me a

IllegalStateException: Expected BEGIN_ARRAY but was STRING

感谢您的帮助!

推荐答案

这样做:

final String json = "[{\"type\":\"string\",\"value\":\"value1\",\"field\":\"label\"},{\"type\":\"string\",\"value\":\"value2\",\"field\":\"address_unique\"}]";
final JsonParser parser = new JsonParser();
final JsonElement rootElement = parser.parse(json);
final JsonArray values = rootElement.getAsJsonArray();
for (final JsonElement value : values) {
    final JsonObject obj = value.getAsJsonObject();
    final Filter filter = new Filter();
    filter.setType(obj.get("type"));
    filter.setValue(obj.get("value"));
    filter.setField(obj.get("field"));
}

这里有一个更自动的方式:

And here is a more automated way:

final String json = "[{\"type\":\"string\",\"value\":\"value1\",\"field\":\"label\"},{\"type\":\"string\",\"value\":\"value2\",\"field\":\"address_unique\"}]";
final TypeToken<List<Filter>> token = new TypeToken<List<Filter>>() {
};
final Gson gson = new Gson();
final List<Filter> values = gson.fromJson(json, token.getType());

这篇关于未命名的json数组转换为java的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆