gson JSON到Java -如何访问具有未知名称的内部对象[重复]

tzcvj98z  于 2023-04-20  发布在  Java
关注(0)|答案(2)|浏览(166)

此问题已在此处有答案

How to decode JSON with unknown field using Gson?(1个答案)
昨天关门了。
我有一个对象的json对象,我试图将内部对象Map到Java类。

{
"176294012937458694583": {
        "id": "176294012937458694583",
        "description": "Beta",
        "name": "BetaName",
        "account_id": "096382648647"
}
"3428378574582548573293": {
        "id": "3428378574582548573293",
        "description": "Omega",
        "name": "OmegaName",
        "account_id": "32735847382"
}
"4657556334646766874556": {
    "id": "4657556334646766874556",
    "description": "Delta",
    "name": "DeltaName",
    "account_id": "93758598257"
}
}

MyJavaClass 
String id;
String description;
String name;
String accountId;

我希望像这样访问内部对象&使用GsonMap到MyJavaClass:

JsonObject jsonObject = response.body().getAsJsonObject("176294012937458694583");
MyJavaClass myJavaClass = gson.fromJson(response.body().toString(), new TypeToken<MyJavaClass>(){}.getType());

但是内部对象的memberName和内部对象的数量在json数据返回之前是未知的。那么访问这些对象并将其Map到MyJavaClass的更好方法是什么呢?

5uzkadbs

5uzkadbs1#

你可以使用Jackson的ObjectMapper将你的字符串输入反序列化为字符串键到MyJavaClass值对象的Map:

var value = new ObjectMapper().readValue(inputString, new TypeReference<Map<String,MyJavaClass>>(){}););

然后,您可以按以下方式访问对象:

value.get("176294012937458694583").getDescription();

rmk:要让Jackson正常工作,必须在MyJavaClass中有一个默认的构造函数和显式的getter

p8h8hvxi

p8h8hvxi2#

正如OldProgrammer所建议的那样,this回答了我的问题。使用jsonObject.entrySet访问我的内部对象的自定义序列化器是我正确Map到MyJavaClass所需要的。

相关问题