簡體   English   中英

如何在特定密鑰處啟動Jackson JSON ObjetMapper?

[英]How can I start a Jackson JSON ObjetMapper at a specific key?

我有一個要映射的JSON數組,如下所示:

{
    "library": [
        {
          "key":"val"
        },
        {
          "key":"val"
        }
    ]
}

有沒有一種使用對象映射器從數組而不是從根開始解析此方法的方法? 我知道您可以進行手動節點解析,但是如果可能的話,我不希望這樣做。 任何幫助,將不勝感激。

傑克遜提供了三種解析json的主要方法:映射,對象,傑克遜節點樹。 這些方法都沒有提供從根目錄以外的任何地方開始的方法。 要從根目錄以外的其他地方開始,您需要從根目錄解析到那里,這意味着您需要從根目錄開始解析! :)

話雖如此,例如,如果您使用映射到對象,則很容易從對象中獲取所需的數組:

package test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Map;

import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class Test {

    static String json = "{\"library\": [{\"key\":\"val\"},{\"key\":\"val\"}]}";

    static class JsonClass {
        private ArrayList<Map<?,?>> library;

        public ArrayList<Map<?, ?>> getLibrary() {
            return library;
        }

        public void setLibrary(ArrayList<Map<?, ?>> library) {
            this.library = library;
        }
    }

    public static void main(String[] args) 
            throws JsonParseException, JsonMappingException, IOException {

        JsonClass parsed = new ObjectMapper().readValue(json, Test.JsonClass.class);
        System.out.println(parsed.getLibrary());

    }

}

運行此打印:

[{key=val}, {key=val}]

一種替代方法是使用流解析器...它可以選擇任何節點,而不必擔心理解整個結構。 我相信Gson有。 但是,在您的情況下,使用流解析器可能是一個過大的選擇:當整體結構復雜,您需要快速處理大量流並且對相對較小的數據感興趣時,這是有意義的。 這些似乎不適用於您的方案。

暫無
暫無

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

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