我如何使用 gson 和 json 对象数组 json 解析 json
how can I parse json using gson with Json Array of json objects
下面是我的 json,我想使用 json 解析它。
{
"status":{
"code":200
},
"authKey":"xyz",
"requireUpdate":false,
"features":[
{
"accounting":true
},
{
"channel":true
},
{
"skipfornow":false
},
{
"xyz":false
},
{
"abc":false
}
]
}
型号class
public class LoginResponse
{
private String authKey;
private Status status;
private Features[] features;
private String requireUpdate;
public String getAuthKey ()
{
return authKey;
}
public void setAuthKey (String authKey)
{
this.authKey = authKey;
}
public Status getStatus ()
{
return status;
}
public void setStatus (Status status)
{
this.status = status;
}
public Features[] getFeatures ()
{
return features;
}
public void setFeatures (Features[] features)
{
this.features = features;
}
public String getRequireUpdate ()
{
return requireUpdate;
}
public void setRequireUpdate (String requireUpdate)
{
this.requireUpdate = requireUpdate;
}
@Override
public String toString()
{
return "ClassPojo [authKey = "+authKey+", status = "+status+", features = "+features+", requireUpdate = "+requireUpdate+"]";
}
}
public class Status
{
private String code;
public String getCode ()
{
return code;
}
public void setCode (String code)
{
this.code = code;
}
@Override
public String toString()
{
return "ClassPojo [code = "+code+"]";
}
}
public class Features
{
private String accounting;
public String getAccounting ()
{
return accounting;
}
public void setAccounting (String accounting)
{
this.accounting = accounting;
}
@Override
public String toString()
{
return "ClassPojo [accounting = "+accounting+"]";
}
}
如您所见,json 中的特征字段是一个 json 数组,除特征中的值外,一切正常。从功能 class 我只获得了会计的价值,但我也想要频道和 skipfornow 键的价值,我怎样才能得到这个。 features json 数组可以有 100 个 json 个对象,
例如 features json 数组有 100 个 json 对象,每个 json 对象有不同的键值对,它来自服务器,有时它可能有 50 json 个对象,有时它可能有 100 个 json 个对象,每个对象都有不同的键
那我应该如何创建特征模型呢?。
创建 class Features
成员 accounting,channel,skipfornow
。
并且在您的 LoginResponse
class 中使用具有对象的特征 features
.
Gson 会自动检测所有these.Object 参考名称非常重要。
您需要在 Features
class
中添加 channel
和 skipfornow
public class Features {
private String accounting;
private String channel;
private String skipfornow;
//Getters && Setters
//...
}
你能再解释一下这句话吗?
features json Array can have lets say 100 json objects then how should I create the feature model ?.
你的意思是你可以拥有其他对象,如 id
或其他什么?如果是这样,您必须在功能 class 中添加所有可能的对象。如果 json 对象存在,您将拥有该值,否则您将获得默认值。
编辑
如果您创建自己的反序列化器(this this ),也许您可以做些事情。这是一个想法(只是一个想法,我现在无法测试)。希望对你有所帮助。
/**
* New Pojo
*/
public class Features {
private Set<Map.Entry<String,JsonElement>> entries;
public void add(Map.Entry<String,JsonElement> element) {
entries.add(element);
}
}
/**
* Features deserializer
*/
public class FeaturesDeserializer implements JsonDeserializer<Features> {
@Override
public FeaturesDeserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException {
JsonArray jarray = json.getAsJsonArray();
Features features = new Features();
for(int i=0; i< jarray.size(); i++) {
JsonObject jobject = jarray.get(i).getAsJsonObject();
//Use of entrySet because your object's name are random
for(Map.Entry<String,JsonElement> m : jobject.entrySet()) {
features.add(m);
}
}
return features;
}
}
下面是我的 json,我想使用 json 解析它。
{
"status":{
"code":200
},
"authKey":"xyz",
"requireUpdate":false,
"features":[
{
"accounting":true
},
{
"channel":true
},
{
"skipfornow":false
},
{
"xyz":false
},
{
"abc":false
}
]
}
型号class
public class LoginResponse
{
private String authKey;
private Status status;
private Features[] features;
private String requireUpdate;
public String getAuthKey ()
{
return authKey;
}
public void setAuthKey (String authKey)
{
this.authKey = authKey;
}
public Status getStatus ()
{
return status;
}
public void setStatus (Status status)
{
this.status = status;
}
public Features[] getFeatures ()
{
return features;
}
public void setFeatures (Features[] features)
{
this.features = features;
}
public String getRequireUpdate ()
{
return requireUpdate;
}
public void setRequireUpdate (String requireUpdate)
{
this.requireUpdate = requireUpdate;
}
@Override
public String toString()
{
return "ClassPojo [authKey = "+authKey+", status = "+status+", features = "+features+", requireUpdate = "+requireUpdate+"]";
}
}
public class Status
{
private String code;
public String getCode ()
{
return code;
}
public void setCode (String code)
{
this.code = code;
}
@Override
public String toString()
{
return "ClassPojo [code = "+code+"]";
}
}
public class Features
{
private String accounting;
public String getAccounting ()
{
return accounting;
}
public void setAccounting (String accounting)
{
this.accounting = accounting;
}
@Override
public String toString()
{
return "ClassPojo [accounting = "+accounting+"]";
}
}
如您所见,json 中的特征字段是一个 json 数组,除特征中的值外,一切正常。从功能 class 我只获得了会计的价值,但我也想要频道和 skipfornow 键的价值,我怎样才能得到这个。 features json 数组可以有 100 个 json 个对象,
例如 features json 数组有 100 个 json 对象,每个 json 对象有不同的键值对,它来自服务器,有时它可能有 50 json 个对象,有时它可能有 100 个 json 个对象,每个对象都有不同的键
那我应该如何创建特征模型呢?。
创建 class Features
成员 accounting,channel,skipfornow
。
并且在您的 LoginResponse
class 中使用具有对象的特征 features
.
Gson 会自动检测所有these.Object 参考名称非常重要。
您需要在 Features
class
channel
和 skipfornow
public class Features {
private String accounting;
private String channel;
private String skipfornow;
//Getters && Setters
//...
}
你能再解释一下这句话吗?
features json Array can have lets say 100 json objects then how should I create the feature model ?.
你的意思是你可以拥有其他对象,如 id
或其他什么?如果是这样,您必须在功能 class 中添加所有可能的对象。如果 json 对象存在,您将拥有该值,否则您将获得默认值。
编辑
如果您创建自己的反序列化器(this this
/**
* New Pojo
*/
public class Features {
private Set<Map.Entry<String,JsonElement>> entries;
public void add(Map.Entry<String,JsonElement> element) {
entries.add(element);
}
}
/**
* Features deserializer
*/
public class FeaturesDeserializer implements JsonDeserializer<Features> {
@Override
public FeaturesDeserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException {
JsonArray jarray = json.getAsJsonArray();
Features features = new Features();
for(int i=0; i< jarray.size(); i++) {
JsonObject jobject = jarray.get(i).getAsJsonObject();
//Use of entrySet because your object's name are random
for(Map.Entry<String,JsonElement> m : jobject.entrySet()) {
features.add(m);
}
}
return features;
}
}