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

mag*_*mar 5 java json deserialization

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

\n\n
{\n  "id": 88319,\n  "dt": 1345284000,\n  "name": "Benghazi",\n  "coord": {\n    "lat": 32.12,\n    "lon": 20.07\n  },\n  "main": {\n    "temp": 306.15,\n    "pressure": 1013,\n    "humidity": 44\n  },\n  "wind": {\n    "speed": 1,\n    "deg": -7\n  },\n  "clouds": {\n    "all": 90\n  },\n  "rain": {\n    "3h": 3\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n

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

\n

Rav*_*yal 4

如果使用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;
    }

}
Run Code Online (Sandbox Code Playgroud)

序列化:(同一个类也适用于fromJson() )

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

参考:
@SerializedName注解