gpt4 book ai didi

java - 使用 Gson 或 Xtream 将 Array Json 列表

转载 作者:行者123 更新时间:2023-12-01 19:03:06 28 4
gpt4 key购买 nike

您好,我有以下 json 代码。

[{"check":{"domain":"qwe.coedu.br"}},{"check":{"domain":"qwe.com.br"}},{"check":{"domain":"qwe.com"}}]"

如何在我的对象中转换此 json

class Check {String domain , String status ...}

它返回 List<Check> ,但检查属性为空。看我的代码。与 Gson 一起。

Gson gson = new Gson();
Type fooType = new TypeToken<Collection<Check>>(){}.getType();
System.out.println(((List<Check>)gson.fromJson("[{\"check\":{\"status\":\"2\",\"domain\":\"william.com.br\"}}]", fooType)).get(0).getDomain());

当我调试返回的列表时,它包含列表中的所有对象,但所有对象的属性均为空。

出了什么问题?

最佳答案

您需要一个自定义转换器,因为您有一个对象列表,其中包含名为 check 的属性。此属性属于具有属性 domainstatus 的类。

这里有两种可能性:

  1. 如果您不想更改 Json 格式,或者您根本无法可以编写自己的 JsonDeserializer ,其中您将实例化您的 Check 对象,然后自行设置属性是最好的选择;
  2. 或者您可以修改您的 check 类,以保存一个 check 属性,该属性的类型包含一个名为 domain 的属性和另一个属性状态

对于第二种情况,需要做什么非常清楚,但对于第一种情况,你可以这样做:

import java.lang.reflect.Type;
import java.util.Collection;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
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.reflect.TypeToken;

public class GsonTestClass {

static class MyDeserializer implements JsonDeserializer<Check> {

public Check deserialize(JsonElement arg0, Type arg1,
JsonDeserializationContext arg2) throws JsonParseException {
JsonObject jsonObject = arg0.getAsJsonObject().get("check").getAsJsonObject();
// this code could be improved with null checks and so on...
return new Check( //
jsonObject.get("domain").getAsString(), //
jsonObject.get("status").getAsString() //
);
}

}

public static void main(String args[]) {
Gson gson = new GsonBuilder().registerTypeAdapter(Check.class, new MyDeserializer()).create();
String json = "[{\"check\":{\"status\":\"2\",\"domain\":\"william.com.br\"}}]";
Type fooType = new TypeToken<Collection<Check>>() {}.getType();
System.out.println((gson.fromJson(json, fooType)));
}

static class Check {

private String domain;
private String status;

public Check() {
}

public Check(String domain, String status) {
super();
this.domain = domain;
this.status = status;
}

public String getDomain() {
return domain;
}

public void setDomain(String domain) {
this.domain = domain;
}

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

@Override
public String toString() {
return "Check: " + domain + " - " + status;
}

}

}

关于java - 使用 Gson 或 Xtream 将 Array Json 列表 <MyObject>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11432435/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com