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

資訊專欄INFORMATION COLUMN

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

printempw / 1530人閱讀

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

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

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


    com.google.code.gson
    gson
    2.8.5
    test


    com.fasterxml.jackson.core
    jackson-databind
    2.9.8
    test

示例JSON
假如,我們希望將不同位置的天氣細節輸入到我們的Java類中。我們發現了一些將天氣數據發布為JSON文檔的網站。但是,它們的格式并未是一致的
{
    "location": "廣州",
    "temp": 15,
    "weather": "多云"
}
{
    "place": "深圳",
    "temperature": 35,
    "outlook": "晴天"
}

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

使用Jackson
為實現這一目標,我們將使用Jackson的@JsonProperty和@JsonAlias注釋。這兩個注解將幫助我們把JSON屬性映射到同一Java字段。

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

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

@JsonProperty("location")
@JsonAlias("place")
private String location;
@JsonProperty("temp")
@JsonAlias("temperature")
private int temp;
 
@JsonProperty("outlook")
@JsonAlias("weather")
private String outlook;

Getter、Setter忽略

現在我們已經添加了注釋,讓我們使用Jackson的ObjectMapper方法創建Weather對象。

@Test
public void test() throws Exception {
 
    ObjectMapper mapper = new ObjectMapper();
 
    Weather weather = mapper.readValue("{
" 
      + "  "location": "廣州",
"
      + "  "temp": 15,
"
      + "  "weather": "多云"
"
      + "}", Weather.class);
 
    TestCase.assertEquals("廣州", weather.getLocation());
        TestCase.assertEquals("多云", weather.getOutlook());
        TestCase.assertEquals(15, weather.getTemp());
 
    weather = mapper.readValue("{
"
      + "  "place": "深圳",
"
      + "  "temperature": 35,
"
      + "  "outlook": "晴天"
"
      + "}", Weather.class);
 
   TestCase.assertEquals("深圳", weather.getLocation());
        TestCase.assertEquals("晴天", weather.getOutlook());
        TestCase.assertEquals(35, weather.getTemp());
}
使用Gson
現在,我們來看看Gson如何實現。我們需要在@SerializedName注釋中使用值和  備用參數。

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

@SerializedName(value="location", alternate="place")
private String location;
@SerializedName(value="temp", alternate="temperature")
private int temp;
 
@SerializedName(value="outlook", alternate="weather")
private String outlook;

現在我們已經添加了注釋,讓我們測試一下我們的例子:

@Test
public void test() throws Exception {
         
    Gson gson = new GsonBuilder().create();
    Weather weather = gson.fromJson("{
"
      + "  "location": "廣州",
"
      + "  "temp": 15,
"
      + "  "weather": "多云"
"
      + "}", Weather.class);
         
    TestCase.assertEquals("廣州", weather.getLocation());
        TestCase.assertEquals("多云", weather.getOutlook());
        TestCase.assertEquals(15, weather.getTemp());
         
    weather = gson.fromJson("{
"
      + "  "place": "深圳",
"
      + "  "temperature": 35,
"
      + "  "outlook": "晴天"
"
      + "}", Weather.class);
        
      TestCase.assertEquals("深圳", weather.getLocation());
        TestCase.assertEquals("晴天", weather.getOutlook());
        TestCase.assertEquals(35, weather.getTemp());
         
}
結論

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73814.html

相關文章

  • Elasticsearch Java High Level REST Client(Search A

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

    liuhh 評論0 收藏0

發表評論

0條評論

printempw

|高級講師

TA的文章

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