2013-04-08 25 views
1

我想使用Jackson Json解析器解析JSON文件,並在使用get(String nodename)函數的過程中解析JSON文件。 但是當我有多個相同名稱的節點時,它試圖到達類似節點的最後一個節點,並僅對它們採取行動。我如何到達所有的節點。傑克遜json:如何找到具有相同節點名稱的多個JSON節點

例如,如果我的JSON文件是

{"menu":{"a":"1", "b":"2"}, 
"menu":{"c":"1", "d":"2"}, 
"menu":{"e":"1", "f":"2"}} 

,如果我試圖做一個get(「菜單」),並嘗試打印在它的字段名,只有E和F得到印刷而我想abcdef打印。

+0

您在同一時間內張貼的非常類似的問題http://stackoverflow.com/questions/15887584/jackson-parser-handling-of-multiplefield-names-with-same-name。請不要那樣做... – 2013-04-09 14:09:41

回答

0

我可能會使用@JsonAnySetter,沿着以下幾行。

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import com.fasterxml.jackson.annotation.JsonAnySetter; 
import com.fasterxml.jackson.databind.ObjectMapper; 

public class App 
{ 
    public static void main(String[] args) throws Exception 
    { 
    /* {"menu":{"a":"1", "b":"2"},"menu":{"c":"1", "d":"2"},"menu":{"e":"1", "f":"2"}} */ 
    String json = "{\"menu\":{\"a\":\"1\", \"b\":\"2\"},\"menu\":{\"c\":\"1\", \"d\":\"2\"},\"menu\":{\"e\":\"1\", \"f\":\"2\"}}"; 

    ObjectMapper mapper = new ObjectMapper(); 
    Foo foo = mapper.readValue(json, Foo.class); 
    System.out.println(foo.menus); 
    } 
} 

class Foo 
{ 
    List<Menu> menus = new ArrayList<>(); 

    @JsonAnySetter 
    public void addMenu(String key, Menu menu) 
    { 
    menus.add(menu); 
    } 
} 

class Menu 
{ 
    Map<String, Object> items = new HashMap<>(); 

    @JsonAnySetter 
    public void addItems(String itemName, String itemValue) 
    { 
    items.put(itemName, itemValue); 
    } 

    @Override 
    public String toString() 
    { 
    return String.format("%s", items); 
    } 
} 
相關問題