java - 使用 GSON,当某些键具有特殊字符时如何将 JSON 转换为 Java

标签 java json gson

一个外部 API 给我一个 JSON 对象,如下所示:

{
    "@date": "1407436242",
    "@duration": "2411",
    "Entry": {
        "@position": "3",
        "@playerName": "fred"
    }
}

如您所见,所有键都以 @ 符号开头,只有一个键除外,它是一个嵌套对象。我们正在使用 GSON 来解析 JSON,我正在尝试尽可能简单地执行此操作,而无需手动将每个键转换为有效的 Java 字段名称。

我目前正在尝试使用这段代码:

MyObject response = gson.fromJson(stringInput, MyObject.class);

这不匹配除 TournamentEntry 之外的任何字段。

我尝试添加一个 gson 字段命名策略,但这似乎是一种全有或全无的方法,并且无法处理某些键有“@”符号而有些键没有的情况。

我如何告诉 GSON 在转换为 Java 字段名称时去掉“@”符号,同时仍然处理没有 @ 符号的嵌套对象?

最佳答案

Gson 提供了 SerializedName应该允许使用那些时髦的 json 标识符的注释。这将使您的类(class)看起来像这样:

package com.example;

import com.google.gson.annotations.SerializedName;
import java.util.Date;

public class Event {

  @SerializedName("@date")
  private Date date;

  @SerializedName("@duration")
  private long duration;

  @SerializedName("Entry")
  private Entry entry;

}

package com.example;

import com.google.gson.annotations.SerializedName;

public class Entry {

  @SerializedName("@position")
  private int position;

  @SerializedName("@playerName")
  private String playerName;  

}

@SerializedName 的优点在于它在每个字段的基础上工作,因此您只需要在需要时进行注释。

关于java - 使用 GSON,当某些键具有特殊字符时如何将 JSON 转换为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25582968/

相关文章:

java - 线程安全数据结构,用于检查是否存在,如果不存在则写入

java - 通过 Utgard 连接到 Matrikon OPC 模拟服务器

java - 使用 gson 反序列化接口(interface)数据无法取回值?

rest - 改造:仅更新特定字段

java - GSON 2.0+ 从两个不同的序列化字段名称中的任何一个反序列化一个字段

java - 如何在reactJS的get请求中设置参数

javascript - 在 JavaScript 或 Json 上获取不同的数据对象

php - jQuery $.get() 数组返回 [object Object]

android - Retrofit 2.0 如何在不转换的情况下获取 JSON 对象?

java - 如何使用 Java 和 MySQL 确定插入或更新是否成功?