从JsonNode获取fieldname

时间:2016-11-01 17:26:38

标签: json jackson

我正在用Jackson解析一些json。这个json的片段如下:

},
"1/1/0": {
  "event": "status",
  "name": "Alarm Status",
  "type": "Alarm",
  "location": "Hall"
},
"1/1/1": {
  "event": "status",
  "name": "Smoke Alarm Status",
  "type": "Alarm",
  "location": "Hall"
},

我很高兴能够为每个对象提取数据,但我很难获得这个'名称'为每个对象。在上面的例子中,这将是' 1/1/0'和' 1/1 / 1'。我是按照以下方式这样做的:

final JsonNode node = parser.parseToNode(configJson);
final JsonNode sensorsChild = node.get("sensors");

    for (JsonNode root : sensorsChild) {
                    final String event = root.get("event").asText();
                    final String name = root.get("name").asText();
                    final String type = root.get("type").asText();
                    final String location = root.get("location").asText();
    }

我想在for循环中使用另一行,如:

final String id = root.getNodeFieldName();

会产生' 1/1 / 0'和' 1/1 / 1'分别。感谢

1 个答案:

答案 0 :(得分:1)

您可以执行类似的操作,遍历根节点以分别通过嵌套的while循环和for循环获取所需的关键字段('1/1/0'和'1/1/1')和每个对象的数据

final JsonNode node = parser.parseToNode(configJson); 

for (JsonNode root : node) {

            Iterator<String> itr = root.getFieldNames();
                while (itr.hasNext()) {  //to get the key fields
                String key_field = itr.next();
                }

            for (JsonNode n : node.get("sensors")) {  //to get each object
                final String event = root.get("event").asText();
                final String name = root.get("name").asText();
                final String type = root.get("type").asText();
                final String location = root.get("location").asText();
                }
   }

如果你使用json映射的pojo类在使用jackson库时执行这些操作会更容易。