mag*_*mar 5 java json deserialization
最近我一直在玩一个返回json这样的对象的网络服务
{\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}\nRun 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如果使用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)