国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

將多個JSON字段映射到單個Java字段

printempw / 1537人閱讀

摘要:簡介本文中,教大家如何使用和將不同的字段映射到單個字段中。這兩個注解將幫助我們把屬性映射到同一字段。因此,將知道文檔中映射到字段的其他字段的名稱。

簡介

</>復(fù)制代碼

  1. 本文中,教大家如何使用Jackson和Gson將不同的JSON字段映射到單個Java字段中。
Maven依賴

為了使用Jackson和Gson庫,我們需要在POM中添加以下依賴項:

</>復(fù)制代碼

  1. com.google.code.gson
  2. gson
  3. 2.8.5
  4. test
  5. com.fasterxml.jackson.core
  6. jackson-databind
  7. 2.9.8
  8. test
示例JSON

</>復(fù)制代碼

  1. 假如,我們希望將不同位置的天氣細節(jié)輸入到我們的Java類中。我們發(fā)現(xiàn)了一些將天氣數(shù)據(jù)發(fā)布為JSON文檔的網(wǎng)站。但是,它們的格式并未是一致的

</>復(fù)制代碼

  1. {
  2. "location": "廣州",
  3. "temp": 15,
  4. "weather": "多云"
  5. }

</>復(fù)制代碼

  1. {
  2. "place": "深圳",
  3. "temperature": 35,
  4. "outlook": "晴天"
  5. }

我們希望將這兩種格式反序列化為同一個Java類,名為 Weather:

使用Jackson

</>復(fù)制代碼

  1. 為實現(xiàn)這一目標(biāo),我們將使用Jackson的@JsonProperty和@JsonAlias注釋。這兩個注解將幫助我們把JSON屬性映射到同一Java字段。

首先,我們將使用@JsonProperty注釋,以便讓Jackson知道要映射的JSON字段的名稱。在值@JsonProperty注解同時用于反序列化和序列化。

然后我們可以使用@JsonAlias注釋。因此,Jackson將知道JSON文檔中映射到Java字段的其他字段的名稱。在用了@JsonAlias注釋的屬性用于反序列化。

</>復(fù)制代碼

  1. @JsonProperty("location")
  2. @JsonAlias("place")
  3. private String location;
  4. @JsonProperty("temp")
  5. @JsonAlias("temperature")
  6. private int temp;
  7. @JsonProperty("outlook")
  8. @JsonAlias("weather")
  9. private String outlook;
  10. Getter、Setter忽略

現(xiàn)在我們已經(jīng)添加了注釋,讓我們使用Jackson的ObjectMapper方法創(chuàng)建Weather對象。

</>復(fù)制代碼

  1. @Test
  2. public void test() throws Exception {
  3. ObjectMapper mapper = new ObjectMapper();
  4. Weather weather = mapper.readValue("{
  5. "
  6. + " "location": "廣州",
  7. "
  8. + " "temp": 15,
  9. "
  10. + " "weather": "多云"
  11. "
  12. + "}", Weather.class);
  13. TestCase.assertEquals("廣州", weather.getLocation());
  14. TestCase.assertEquals("多云", weather.getOutlook());
  15. TestCase.assertEquals(15, weather.getTemp());
  16. weather = mapper.readValue("{
  17. "
  18. + " "place": "深圳",
  19. "
  20. + " "temperature": 35,
  21. "
  22. + " "outlook": "晴天"
  23. "
  24. + "}", Weather.class);
  25. TestCase.assertEquals("深圳", weather.getLocation());
  26. TestCase.assertEquals("晴天", weather.getOutlook());
  27. TestCase.assertEquals(35, weather.getTemp());
  28. }
使用Gson

</>復(fù)制代碼

  1. 現(xiàn)在,我們來看看Gson如何實現(xiàn)。我們需要在@SerializedName注釋中使用值和 備用參數(shù)。

第一個將用作默認(rèn)值,而第二個將用于指示我們要映射的JSON字段的備用名稱:

</>復(fù)制代碼

  1. @SerializedName(value="location", alternate="place")
  2. private String location;
  3. @SerializedName(value="temp", alternate="temperature")
  4. private int temp;
  5. @SerializedName(value="outlook", alternate="weather")
  6. private String outlook;

現(xiàn)在我們已經(jīng)添加了注釋,讓我們測試一下我們的例子:

</>復(fù)制代碼

  1. @Test
  2. public void test() throws Exception {
  3. Gson gson = new GsonBuilder().create();
  4. Weather weather = gson.fromJson("{
  5. "
  6. + " "location": "廣州",
  7. "
  8. + " "temp": 15,
  9. "
  10. + " "weather": "多云"
  11. "
  12. + "}", Weather.class);
  13. TestCase.assertEquals("廣州", weather.getLocation());
  14. TestCase.assertEquals("多云", weather.getOutlook());
  15. TestCase.assertEquals(15, weather.getTemp());
  16. weather = gson.fromJson("{
  17. "
  18. + " "place": "深圳",
  19. "
  20. + " "temperature": 35,
  21. "
  22. + " "outlook": "晴天"
  23. "
  24. + "}", Weather.class);
  25. TestCase.assertEquals("深圳", weather.getLocation());
  26. TestCase.assertEquals("晴天", weather.getOutlook());
  27. TestCase.assertEquals(35, weather.getTemp());
  28. }
結(jié)論

我們通過使用Jackson的@JsonAlias或Gson的替代參數(shù)看到了這一點,我們可以輕松地將不同的JSON格式轉(zhuǎn)換為相同的Java對象。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/73814.html

相關(guān)文章

  • Elasticsearch Java High Level REST Client(Search A

    摘要:搜索請求用于與搜索文檔聚合相關(guān)的任何操作,還提供了在結(jié)果文檔上請求高亮的方法。將字段高光色添加到高亮構(gòu)建器。稍后可以從中檢索高亮的文本片段。 Search API 搜索請求 SearchRequest用于與搜索文檔、聚合、suggestions相關(guān)的任何操作,還提供了在結(jié)果文檔上請求高亮的方法。 在最基本的表單中,我們可以向請求添加查詢: SearchRequest searchReq...

    liuhh 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<