java - 如何将 Json 属性名称映射到 Java 字段值

标签 java json jackson

如何使用 jackson 将 JSON 属性名称映射到 Java 字段值?

这个:

{ "list":[  { "monday":[ "apple", "bread"] } ,
            { "sunday":[ "bacon", "beer" ] } ],
  "kind":"shoplist" }

对此:

public class StuffList {
    public List<Stuff> list;
    public String kind;
}

public class Stuff {
    public String name;
    public List<String> items; 
}

片段 "monday":[ "apple", "bread"] 映射到两个变量,一个包含属性名称,另一个包含属性值。

最佳答案

您的 JSON 表示简单的 map 列表,更准确地说:List<Map<String, List<String>>> 。您可以将此 JSON 转换为此 POJO:

class JsonEntity {

    public List<Map<String, List<String>>> list;
    public String kind;

    public StuffList toStuffList() {
        StuffList stuffList = createStuffListObject();

        return stuffList;
    }

    private StuffList createStuffListObject() {
        StuffList stuffList = new StuffList();
        stuffList.kind = kind;
        stuffList.list = createItemsList();

        return stuffList;
    }

    private List<Stuff> createItemsList() {
        List<Stuff> items = new ArrayList<Stuff>(list.size());
        for (Map<String, List<String>> item : list) {
            items.add(convertToStuff(item));
        }

        return items;
    }

    private Stuff convertToStuff(Map<String, List<String>> item) {
        Stuff stuff = new Stuff();
        stuff.name = item.keySet().iterator().next();
        stuff.items = item.values().iterator().next();

        return stuff;
    }
}

现在我们可以通过这种方式反序列化 JSON:

public static void main(String[] args) throws Exception {
    String json = "{\"list\":[{\"monday\":[\"apple\", \"bread\"]},{\"sunday\":[\"bacon\", \"beer\"]} ],\"kind\":\"shoplist\"}";

    ObjectMapper objectMapper = new ObjectMapper();
    JsonEntity jsonEntity = objectMapper.readValue(json, JsonEntity.class);
    System.out.println(jsonEntity.toStuffList());
}

程序的输出:

list=[[name=monday, items=[apple, bread]], [name=sunday, items=[bacon, beer]]], kind=shoplist

关于java - 如何将 Json 属性名称映射到 Java 字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16695527/

相关文章:

java - 用于构建 JSON REST API 的 Jersey/Jackson 的更好替代方案?

java - spring请求体将名称分配给数组/列表

testing - 如何将模拟 mvc GET 调用映射到 java POJO?

java - butterknife 库问题

java - 最接近的匹配值 sqlite

json - RxSwift 可观察到的错误停止链 - 使用 Rx 的 Web 服务,如何恢复?

javascript - 将 .json 文件中的数据加载到 Angular 中的工厂中

java - 库存程序只读取一行?

java - 将单选按钮绑定(bind)到 Spring Webflow 中的特定枚举值

sql - 使用 SQL 查询从包含表列的 Json 对象获取值