使用Gson解析JSON数组到Java列表
从给定的使用Gson解析JSON数组到Java列表,java,json,list,gson,json-deserialization,Java,Json,List,Gson,Json Deserialization,从给定的JSON生成SimpleTestClass类型的List的最佳方法是什么,其中有一个新的SimpleTestClass对象,用于JSON的recipients数组中的值以及代码集 public class SimpleTestClass{ String code; String recipient; } JSON有效负载: { "code": 123, "recipients": [ "888888", "222
JSON
生成SimpleTestClass
类型的List
的最佳方法是什么,其中有一个新的SimpleTestClass
对象,用于JSON
的recipients
数组中的值以及代码集
public class SimpleTestClass{
String code;
String recipient;
}
JSON
有效负载:
{
"code": 123,
"recipients": [
"888888",
"222222"
]
}
类SimpleTestClass{
字符串代码;
列出收件人名单;
公共字符串getCode(){
返回码;
}
公共无效设置码(字符串码){
this.code=代码;
}
公共列表getRecipients(){
返回收件人;
}
公共收件人(列出收件人){
this.recipients=收件人;
}
}
公共类ServerMain{
公共静态void main(字符串[]args){
Gson g=新的Gson();
SimpleTestClass类=g.fromJson(json,SimpleTestClass.class);
}
}
如果JSON
结构不适合POJO
模型,您需要编写自定义反序列化程序或创建新的POJO
模型,该模型适合JSON
并在反序列化过程后将其转换为所需模型。下面您可以找到自定义反序列化器的解决方案,它允许您以非常灵活的方式处理给定的JSON
:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.annotations.JsonAdapter;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class GsonApp {
public static void main(String[] args) {
String json = "{\"code\": 123,\"recipients\": [\"888888\",\"222222\"]}";
Gson gson = new GsonBuilder().create();
List<Recipient> recipients = gson.fromJson(json, Recipients.class).getRecipients();
recipients.forEach(System.out::println);
}
}
class RecipientsJsonDeserializer implements JsonDeserializer<Recipients> {
@Override
public Recipients deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
List<Recipient> recipients = new ArrayList<>();
JsonObject root = json.getAsJsonObject();
String code = root.get("code").getAsString();
JsonArray recipientsArray = root.getAsJsonArray("recipients");
recipientsArray.forEach(item -> {
recipients.add(new Recipient(code, item.getAsString()));
});
return new Recipients(recipients);
}
}
@JsonAdapter(RecipientsJsonDeserializer.class)
class Recipients {
private final List<Recipient> recipients;
public Recipients(List<Recipient> recipients) {
this.recipients = recipients;
}
// getters, toString
}
class Recipient {
private final String code;
private final String recipient;
public Recipient(String code, String recipient) {
this.code = code;
this.recipient = recipient;
}
// getters, toString
}
对但是,如果想要确切的结构:对于每个接收者,使用给定代码创建新的SimpleTestClass对象,该怎么办?您能详细解释一下吗?例如,在收件人数组中的json中,我们有两个值“88888”和“22222”。我想找到生成SimpleTestClass类型的两个对象的最佳方法,一个用于“88888”,另一个用于“22222”,其中设置了代码,在这种情况下是“123”。我只是在寻找做这件事的最佳方式,也许是用Gson做的
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.annotations.JsonAdapter;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class GsonApp {
public static void main(String[] args) {
String json = "{\"code\": 123,\"recipients\": [\"888888\",\"222222\"]}";
Gson gson = new GsonBuilder().create();
List<Recipient> recipients = gson.fromJson(json, Recipients.class).getRecipients();
recipients.forEach(System.out::println);
}
}
class RecipientsJsonDeserializer implements JsonDeserializer<Recipients> {
@Override
public Recipients deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
List<Recipient> recipients = new ArrayList<>();
JsonObject root = json.getAsJsonObject();
String code = root.get("code").getAsString();
JsonArray recipientsArray = root.getAsJsonArray("recipients");
recipientsArray.forEach(item -> {
recipients.add(new Recipient(code, item.getAsString()));
});
return new Recipients(recipients);
}
}
@JsonAdapter(RecipientsJsonDeserializer.class)
class Recipients {
private final List<Recipient> recipients;
public Recipients(List<Recipient> recipients) {
this.recipients = recipients;
}
// getters, toString
}
class Recipient {
private final String code;
private final String recipient;
public Recipient(String code, String recipient) {
this.code = code;
this.recipient = recipient;
}
// getters, toString
}
Recipient{code='123', recipient='888888'}
Recipient{code='123', recipient='222222'}