簡體   English   中英

當一些變量名以數字開頭時,如何將Json映射到Java類?

[英]How to map Json to Java classes when some variable names begin with a number?

最近我一直在玩一個返回像這樣的json對象的web服務

{
  "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和其他框架。 ¿這個問題框架的答案是否依賴? 為了更具體,並考慮到未來,我想堅持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

您可以為要生成的屬性的數據類型添加前綴。 與各個對象的arr_,int_,obj_等一樣,因為在自動生成期間,無論如何都要處理數據類型。 這將成為一般修復,而不是專門尋找像“3h”這樣的字符串。 但在設計方面或良好實踐方面,這可能不是最佳解決方案。

“我想知道是否有更方便的方法來處理這種情況。”

首先,我無法弄清楚“這種情況”是什么,因為你沒有提到你進行映射的框架或方法。

如果你想讓屬性標識符映射到你的json鍵,從數字開始,這是不可能的,這也只是好的。

因為,例如,如果您的最后一個子文檔:

"rain": {
    "3h": 3
  }

被映射到類Rain:

class Rain{
   int 3h=3
}

那么你將如何解析變量賦值“3h = 3”?(請參閱 SO帖子)

所以我能想到的一種方法是,你可以為任何鍵添加前綴,這些鍵以帶有特殊法律標識符charatcers(如“_”下划線)的數字開頭,然后刪除賦值。

這意味着,您可以將您的json子文檔映射映射為:

class Rain{
   int _3h=3
}

然后在反序列化時刪除前導下划線。

希望有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM