java - 当一些变量名以数字开头时,如何将 Json 映射到 Java 类?

标签 java json deserialization

最近我一直在玩一个网络服务,它返回一个像这样的 json 对象

{
  "id": 88319,
  "dt": 1345284000,
  "name": "Benghazi",
  "coord": {
    "lat": 32.12,
    "lon": 20.07
  },
  "main": {
    "temp": 306.15,
    "pressure": 1013,
    "humidity": 44
  },
  "wind": {
    "speed": 1,
    "deg": -7
  },
  "clouds": {
    "all": 90
  },
  "rain": {
    "3h": 3
  }
}

我已自动生成映射到该 json 数据的 Java 类。问题是我无法生成具有名为 3h 的属性的 Java 类(在 Java 中和在许多其他语言中一样,变量标识符不能以数字开头)。作为一个技巧,我将属性 3h 重新定义为 h3,每当我收到来自 Web 服务的 json 响应时,我都会将字符串“3h”替换为“h3”。

但是,该方法仅适用于小型项目。我想知道是否有更方便的方法来处理这种情况。

注意:对于这个特定示例,我使用了一个在线工具,该工具在给定 json 示例的情况下生成 java 类。在其他情况下,我使用了 Jackson 和其他框架。 ¿这个问题的答案是否依赖于框架?更具体地说,考虑到 future ,我愿意遵守 json-schema 规范

最佳答案

如果使用 Gson您可以使用 @SerializedName 注释来完成。

Java 类:

public class JsonData {

    @SerializedName("3h")
    private int h3;

    private String name;

    public JsonData(int h3, String name) {
        this.h3 = h3;
        this.name = name;
    }

}

序列化:(同样的类也适用于 fromJson())

// prints: {"3h": 3,"name": "Benghazi"}
System.out.println(new Gson().toJson(new JsonData(3, "Benghazi")));

引用:
@SerializedName Annotation

关于java - 当一些变量名以数字开头时,如何将 Json 映射到 Java 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17610295/

相关文章:

java - 如何使用可选的秒参数创建 DateTimeformatter

java - 在 Eclipse 中自定义搜索(文件)功能

Java通过网络序列化,重新传递相同的对象?

c# - 为什么在 c# 中反序列化我的 packages.config 会返回空值?

javascript - 如何将文本添加到 JSON 的开头和结尾以使其成为 JSONP

c# - 反序列化来自 firebase 的响应

java - DirectBuffer 加速 ImageIO

java - 无状态 session Bean 中的实例变量 - 状态如何维护?

javascript - 根据用户从 JSON 文件中选择的月份显示图表

java - Android Java Spring JSON 响应在键中有 $。如何解析?