1

Jackson Json パーサーを使用して JSON ファイルを解析しようとしていますが、その過程で get(String nodename) 関数を使用しています。しかし、同じ名前のノードが複数ある場合、類似したノードの最後に到達して、それらに対してのみ動作しようとしています。すべてのノードにアクセスするにはどうすればよいですか。

たとえば、私のjsonファイルが

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

get("menu") を実行してフィールド名を出力しようとすると、e と f だけが出力されますが、abcdef は出力されます。

4

1 に答える 1

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);
  }
}
于 2013-04-08T22:37:40.827 に答える