我正在尝试使用Jackson Json解析器解析JSON文件,并在此过程中使用get(String nodename)函数。 但是,当我有多个同名节点时,它会尝试到达最后一个相似的节点并仅对它们起作用。我如何到达所有节点。
例如,如果我的json文件是
{"menu":{"a":"1", "b":"2"},
"menu":{"c":"1", "d":"2"},
"menu":{"e":"1", "f":"2"}}
如果我正在尝试获取(“菜单”)并尝试在其中打印字段名称,则只打印e和f,而我希望打印出来。
答案 0 :(得分: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);
}
}