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/

相关文章:

javascript - 使用 TypeScript 函数返回 JSON 对象

javascript - 解析 Rails 中的 JSON 问题

c# - 如何强制对同名的派生类型进行 XML 反序列化?

java - 尝试在 java 中使用 TLSv2 连接到 ssl url 时出现错误 "handshake_failure"

java - 在文本字段中使用预定义方法之前如何测试空值

android - 如何从在android中没有名称的嵌套json中获取数据?

c# - 如何将非数组 json 反序列化为实现 List<T> 的子类?

C#反序列化xml文件

java - 如何在Java中将函数作为参数传递?

java - 替换 Google 协议(protocol)数据缓冲区中的字符串