栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

杰克逊反序列化具有未知的动态特性

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

杰克逊反序列化具有未知的动态特性

您的

shipping_profiles
媒体资源看起来不像数组。它代表具有动态属性的对象,因此我们应将其视为对象。如果我们对属性一无所知,可以使用
@JsonAnySetter
注释。算法可能如下所示:

  1. 将JSON反序列化为JSON模型类。
  2. 使用ObjectMapper将动态对象(地图)转换为应用的POJO类
  3. 随时使用应用程序的POJO。

请参阅我的示例实现。希望它能帮助您解决问题。输入JSON:

{   "shipping_profiles":{      "563":{         "name":"name563",         "value":"value563"      },      "564":{         "name":"name564",         "value":"value564"      },      "565":{         "name":"name565",         "value":"value565"      },      "566":{         "name":"name566",         "value":"value566"      }   }}

示例程序:

import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.Map;import com.fasterxml.jackson.annotation.JsonAnySetter;import com.fasterxml.jackson.annotation.JsonProperty;import com.fasterxml.jackson.databind.ObjectMapper;public class JacksonProgram {    public static void main(String[] args) throws IOException {        ObjectMapper mapper = new ObjectMapper();        File source = new File("X:/test.json");        Entity entity = mapper.readValue(source, Entity.class);        ShippingProfiles shippingProfiles = entity.getShippingProfiles();        List<Map<String, String>> profileMaps = shippingProfiles.getProfiles();        List<Profile> profiles = new ArrayList<Profile>(profileMaps.size());        for (Map<String, String> item : profileMaps) { profiles.add(mapper.convertValue(item, Profile.class));        }        System.out.println(profiles);    }}class Entity {    @JsonProperty("shipping_profiles")    private ShippingProfiles shippingProfiles;    public ShippingProfiles getShippingProfiles() {        return shippingProfiles;    }    public void setShippingProfiles(ShippingProfiles shippingProfiles) {        this.shippingProfiles = shippingProfiles;    }}class ShippingProfiles {    private List<Map<String, String>> profiles = new ArrayList<Map<String, String>>();    @JsonAnySetter    public void setDynamicProperty(String name, Map<String, String> map) {        profiles.add(map);    }    public List<Map<String, String>> getProfiles() {        return profiles;    }    public void setProfiles(List<Map<String, String>> profiles) {        this.profiles = profiles;    }}class Profile {    private String name;    private String value;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getValue() {        return value;    }    public void setValue(String value) {        this.value = value;    }    @Override    public String toString() {        return "Profile [name=" + name + ", value=" + value + "]";    }}

应用上方的照片:

[Profile [name=name563, value=value563], Profile [name=name564, value=value564], Profile [name=name565, value=value565], Profile [name=name566, value=value566]]


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/616819.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号