gpt4 book ai didi

java - JSON 文本到 Java 的转换问题与随机数生成

转载 作者:行者123 更新时间:2023-12-01 09:28:55 24 4
gpt4 key购买 nike

例如,我的 JSON 文本是这样的。

"pages":{"42010":{"pageid":42010,"ns":0,"title":"Queen (band)"}}

因为每次我的 json 文本都会带有不同的数字,即内页标签。

如何将其转换为 Java 等效类?

目前我生成的java类是这样的。

@Generated("org.jsonschema2pojo")
public class Pages {

@SerializedName("42010")
@Expose
private _42010 _42010;
}

_42010 类包含 "pageid":42010,"ns":0,"title":"Queen (band)" 等内部字段,因为我每次在pages内都会收到新号码,但它不起作用。它仅适用于特定的 json 文本。

最佳答案

您可以使用忽略更改数字的自定义反序列化器。例如:

package jacksonTest;

import java.io.IOException;
import java.lang.reflect.Type;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
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;

public class CustomDeserialiser {


public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
String json = "{\"42010\":{\"pageid\":42010,\"ns\":0,\"title\":\"Queen (band)\"}}";
String json2 = "{\"12345\":{\"pageid\":12345,\"ns\":0,\"title\":\"Queen (band)\"}}";

Gson g = new GsonBuilder().registerTypeAdapter(Pages.class, new PagesDeserialiser()).create();

Pages fromJson = g.fromJson(json, Pages.class);
System.out.println(fromJson);

fromJson = g.fromJson(json2, Pages.class);
System.out.println(fromJson);
}

public static class PagesDeserialiser implements JsonDeserializer<Pages> {

@Override
public Pages deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws com.google.gson.JsonParseException {
JsonObject object = json.getAsJsonObject();

Pages p = new Pages();
object.entrySet().forEach( e -> {
JsonObject tmp = e.getValue().getAsJsonObject();
if(tmp.get("pageid") != null) {
// right object
p._42010 = new _42010();
p._42010.ns = tmp.get("ns").getAsInt();
p._42010.pageid = tmp.get("pageid").getAsInt();
p._42010.title = tmp.get("title").getAsString();
}
});

return p;
}

}

public static class Pages {

_42010 _42010;

@Override
public String toString() {
return _42010.toString();
}


}

public static class _42010 {
int pageid;
int ns;
String title;

@Override
public String toString() {
return title + " " + pageid + " " + ns;
}
}

}

类型页面的反序列化器只是检查条目以查找包含 pageId 的条目,然后填充该类。

运行我的测试会给你:

Queen (band) 42010 0
Queen (band) 12345 0

我假设您使用 Gson 作为 json 库。

问候,

阿图尔

关于java - JSON 文本到 Java 的转换问题与随机数生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39613136/

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