Jackson JSON映射键作为包含对象的属性

Nic*_*cek 7 java json jackson

给定这样的结构:

{
  "nameOfObject": { "score": 100 },
  "anotherObject": { "score": 30 }
}
Run Code Online (Sandbox Code Playgroud)

是否可以将其映射到:

class Container {
  Map<String, ScoreKeeper> scoreKeepers;
}

class ScoreKeeper {
  String name;
  int score;
}
Run Code Online (Sandbox Code Playgroud)

那么你最终name得到的ScoreKeeper实例的属性分别设置为"nameOfObject""anotherObject"

Buz*_*tti 4

我坚信将 POJO 与外部化分开。将 JSON 读入 Map,然后构建 Container/ScoreKeeper 对象,如下所示(针对任何拼写错误的 apols):

mapper = new ObjectMapper();

Map<String,Object> data = mapper.readValue(inputstream, Map.class);

Container c = new Container();

for(Map.Entry<String, Object> me : data.entrySet()) {
    String key = me.getKey();
    Map info = (Map) me.getValue();

    ScoreKeeper sk = new ScoreKeeper();
    sk.setName(key);
    Integer q = info.get("score");
    sk.setScore(q);

    c.put(key, sk);
}
Run Code Online (Sandbox Code Playgroud)