![](/img/trans.png)
[英]how to map a json when I don't know the names of the parameters and their number in java using rest template?
[英]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")));
您可以為要生成的屬性的數據類型添加前綴。 與各個對象的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.