如何使用 Google Json 解析 API (Gson) 解析 json 中的一些动态字段?

发布于 2024-10-14 14:17:53 字数 302 浏览 2 评论 0原文

我有一个结构化的 Json 在某些字段中是可变的,如何使用 Gson google json api 在 Java 中正确解析(反序列化)它?

Json 示例:

{ 
type: 'sometype',
fields: {
    'dynamic-field-1':[{value: '', type: ''},...],
    'dynamic-field-2':[{value: '', type: ''},...],
...
}

动态字段将根据发送的结构更改其名称。

有办法吗?

I have a structured Json to be mutable in some fields, how can I parse (deserialize) it correctly in Java using Gson google json api ?

Json example:

{ 
type: 'sometype',
fields: {
    'dynamic-field-1':[{value: '', type: ''},...],
    'dynamic-field-2':[{value: '', type: ''},...],
...
}

The dynamic-fields will change its name depending on the structure sent.

Is there a way ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

神也荒唐 2024-10-21 14:17:53

您可以按照 Raph Levien 的建议使用自定义(反)序列化,但是,Gson 本身就可以理解映射。

如果运行此命令,您将获得输出 {"A":"B"}

Map<String, String> map = new HashMap<String, String>();
map.put("A", "B");
System.out.println(new Gson().toJson(src));

映射现在可以包含您的动态键。要再次读取该 Json,您需要通过 TypeToken 告诉 Gson 有关类型信息,这是 Gson 记录 Java 擦除的运行时类型信息的方式。

Map fromJson = 
    new Gson().fromJson(
        "{\"A\":\"B\"}", 
        new TypeToken<HashMap<String, String>>() {}.getType());
System.out.println(fromJson.get("A"));

我希望这有帮助。 :)

You can use custom (de)serialization as Raph Levien suggests, however, Gson natively understands maps.

If you run this you will get the output {"A":"B"}

Map<String, String> map = new HashMap<String, String>();
map.put("A", "B");
System.out.println(new Gson().toJson(src));

The map can now contain your dynamic keys. To read that Json again you need to tell Gson about the type information through a TypeToken which is Gson's way of recording the runtime type information that Java erases.

Map fromJson = 
    new Gson().fromJson(
        "{\"A\":\"B\"}", 
        new TypeToken<HashMap<String, String>>() {}.getType());
System.out.println(fromJson.get("A"));

I hope that helps. :)

红焚 2024-10-21 14:17:53

使用 google-gson 我这样做:

JsonElement root = new JsonParser().parse(jsonString);

然后你就可以使用 json 了。例如:

String value = root.getAsJsonObject().get("type").getAsString();

Using google-gson I do it this way:

JsonElement root = new JsonParser().parse(jsonString);

and then you can work with json. e.g.:

String value = root.getAsJsonObject().get("type").getAsString();
池木 2024-10-21 14:17:53

是的,编写一个采用通用 JsonElement 对象的自定义反序列化器。这是一个示例:

http://benjii.me/2010/ 04/反序列化-json-in-android-using-gson/

Yes, write a custom deserializer that takes a generic JsonElement object. Here's an example:

http://benjii.me/2010/04/deserializing-json-in-android-using-gson/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文