我已经检查过许多如何为具有键值对的json创建Model类的示例。但我有以下类型的json,其中字段名称取决于json中的值。请看下面的json -
{ "args" :
[{
"name":"fullName",
"value":"Vikram",
"type":"String"
},
{
"name":"userName",
"value":"abc@gmail.com",
"type":"String"
}
]
}
有人可以请教我如何为这个json创建模型类吗? 对于上面的json,我希望我的模型类应该如下 -
public class Model {
private String userName;
private String fullName;
...
public String getUserName() {
return userName;
}
public void setUserName(String name) {
this.userName = name;
}
public String getFullName() {
return fullName;
}
public void setFullName(String value) {
this.fullName = value;
}
}
这可能吗? 我知道如何为json创建模型类,如 -
{ "args" :
[{
"fullName":"Vikram",
"userName":"abc@gmail.com"
}
]
}
答案 0 :(得分:1)
以您提到的方式创建模型是不可能的,因为在编译时不知道布局。 (Java没有类型提供者)
也许一种方便的方法是序列化到一些字典中,但保存值的类型:
class Model {
private final Map<String, Value> fields = new HashMap<>();
public Value getValue(String fieldName) {
return fields.get(fieldName);
}
public static Model deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
Model ret = new Model();
JsonArray args = json.getAsJsonObject() // Get 'args' array
.get("args")
.getAsJsonArray();
for(JsonElement e : args) {
JsonObject o = e.getAsJsonObject();
ret.fields.put(
o.get("name").getAsString(),
new Value(o.get("type").getAsString(), o.get("value"))
);
}
return ret;
}
}
class Value {
private final String type;
private final JsonElement obj;
public Value(String type, JsonElement obj) {
this.type = type;
this.obj = obj;
}
public String getType() {
return type;
}
public String getAsString() {
return obj.getAsString();
}
...
}
然后,您可以将此deserialize
方法注册为类型适配器:
Gson gson = new GsonBuilder()
.registerTypeAdapter(
Model.class,
(JsonDeserializer<Model>) Model::deserialize
).create();
String json = ...;
Model m = gson.fromJson(json, Model.class);
System.out.println(m.getValue("fullName").getAsString()); // 'Vikram'
System.out.println(m.getValue("userName").getAsString()); // 'abc@gmail.com'
答案 1 :(得分:0)
public class Model {
private String name;
private String value;
private String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
使用此课程。用于存储数据。创建
List<Model> list =new ArrayList<>();
创建对象模型类设置其值然后添加到列表。