gpt4 book ai didi

java - 读取已通过gson库序列化的嵌套json对象

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

我正在共享首选项中存储一个对象。为此,我在存储对象之前使用 gson 库和类型适配器序列化对象。

这是我的对象在 json 中的样子:

    {
"id": 0,
"name": "Sensor 2D:D3:5C",
"address": "00:07:80:2D:D3:5C",
"device": {
"mAddress": "00:07:80:2D:D3:5C"
},
"temp": "31342e37"
}

这一切都有效,但在反序列化“设备”时不起作用,因为它是一个 BluetoothDevice 对象而不是简单的字符串或 int 值。我如何告诉我的 TypeAdapter 正确反序列化它?

这是我的类型适配器的读取方法:

    @Override
public myDevice read(final JsonReader in) throws IOException {
final myDevice dv= new myDevice();
in.beginObject();
while (in.hasNext()) {
switch (in.nextName()) {
case "id":
dv.setId(in.nextInt());
break;
case "name":
dv.setName(in.nextString());
break;
case "address":
dv.setAddress(in.nextString());
break;
case "temp":
dv.setTemp(in.nextString());
break;
case "device":
//What do I do here??
//dv.setDevice(in.????);
break;
}
}
in.endObject();
return vd;
}

最佳答案

是否有理由使用 TypeAdapter 而不是直接将 JSON 映射到对象中?例如:

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

如果您需要使用JsonReader,那么您可以考虑通过调用reader.peek()来使用JsonToken。然后,您将能够切换 token 类型(BEGIN_OBJECTEND_OBJECTBEGIN_ARRAYSTRING...)。

关于java - 读取已通过gson库序列化的嵌套json对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30901294/

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