簡體   English   中英

如何在ObjectMapper.readValue中遞歸解析json值?

[英]How to recursively parse json value in ObjectMapper.readValue?

我正在嘗試使用Jackson ObjectMapper將json字符串中的json字符串解析為Object。 但我找不到干凈的方法來做到這一點。

我有一個SQL表存儲列表作為json字符串,如"[1,2,3]" 然后我將所有列讀入Map中,然后嘗試使用objectMapper.convertValue生成Java對象。

所以這是一個重新創建問題的快速片段。 請注意我不控制在實際代碼中如何生成Map。

@Data
public class Main {
    private List<Integer> bar;

    public static void main(String[] args) throws Exception{
        ObjectMapper objectMapper = new ObjectMapper();
        Map<String, Object> objectMap = new HashMap<String, Object>();
        objectMap.put("bar", "[1,2,3]");
        // Main foo = objectMapper.convertValue(objectMap, Main.class)
        String json = objectMapper.writeValueAsString(objectMap);
        Main foo = objectMapper.readValue(json, Main.class);

        System.out.println(foo.getBar());
    }
}

但這不對。 ObjectMapper嘗試直接將String轉換為List而不是解析字符串。 我希望foo.getBar()返回一個包含3個元素的List,但代碼在轉換階段已經失敗了。

您應該將"[1,2,3]"設為String[]這樣:

"[1,2,3]".replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\s", "").split(",")

就像是:

public static void main(String[] args) throws Exception {
    ObjectMapper objectMapper = new ObjectMapper();
    Map<String, Object> objectMap = new HashMap<String, Object>(){{
        put("bar", "[1,2,3]".replaceAll("\\[", "")
                            .replaceAll("]", "")
                            .replaceAll("\\s", "").split(","));
    }};

    String json = objectMapper.writeValueAsString(objectMap);
    Main foo = objectMapper.readValue(json, Main.class);

    System.out.println(foo.getBar());
}

你需要將"[1,2,3]"替換為你得到的東西。

注意:不確定應用程序邏輯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM