gpt4 book ai didi

java - json对象与java对象不一致时的gson.fromJson

转载 作者:行者123 更新时间:2023-11-29 08:49:31 25 4
gpt4 key购买 nike

假设我有一个类:

class A {
List<C> b;
}

class C {
String str;
}

我有一个包含以下内容的 json 字符串:

{ 
"b": [
{ ... },
{ ... }
]
}

所以执行以下操作会很好:

Gson gson = new Gson();
gson.fromJson(jsonString, A.class);

但现在我有一个更复杂的案例,我使用相同的 json 来传递更多数据,但我仍然想使用 gson,因为它非常好用。所以现在我的json如下:

{ 
"b": [
{ ... },
{ ... }
],
"c": 7
}

是否可以告诉 gson 对象忽略它无法评估的内容?所以它将只需要它从我的 A 中知道的信息类,或者我使用 @SerializedName 指定的内容?

我知道更原始的方法,使用 JSONObject , 但为了继续使用 Gson我将不得不制作"b"嵌套在一个层次上以使其工作,因为它需要一个具有对象数组的对象,并使用 JSONObject.get("b")只会给我其中的数组。

更新,更具体地说,我添加了一个我尝试使用的 json 对象

这个 json 是我开始的,只是一个 b 的数组的,如果我运行它就可以正常工作:

{
"b": [
{
"str": "first string"
}
]
}

这个 json 是一个更复杂的案例,我确实有一个列表 b的,这正是 gson 需要的,但也是另一个不特定于我的 A 的参数类,这是我希望 gson 忽略并表现得像第一种情况。

{
"b": [
{
"str": "first string"
}
],
"c": 7
}

最佳答案

我们一直以来解决这类问题的方法是定义占位符类,它能够抓取数据,所以:

class A {
List<C> b;
}

class C {
String str;
}

class ContainerA extends HashMap<String, A>{
}

然后你做:

Gson gson = new Gson();
Map<String, A> javaMap = gson.fromJson(jsonString, ContainerA.class);

这是一种解决方法,但对于 Gson 和 Android 的 Spring 和 GsonHttpMessageConverter 都可以正常工作。

关于java - json对象与java对象不一致时的gson.fromJson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23467674/

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