【问题标题】:Get fieldname from JsonNode从 JsonNode 获取字段名
【发布时间】:2016-11-01 17:26:38
【问题描述】:

我正在使用 Jackson 来解析一些 json。来自这个 json 的 sn-p 如下:

},
"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”。谢谢

【问题讨论】:

  • 你能发布完整的 json 吗?
  • @DerickDaniel 不幸的是,我不能,因为它有 1000 行长,但 sn-p 应该很好地表明我所面临的问题。
  • @Tomalek 我不确定是否如此。我之前看过,无法让“for”循环与错误“for-loop not applicable to the expression type”一起工作

标签: json jackson


【解决方案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 库时执行这些操作会更容易。

【讨论】:

    猜你喜欢
    • 2014-12-18
    • 2022-08-07
    • 2018-09-06
    • 2019-02-15
    • 1970-01-01
    • 2019-04-07
    • 2013-02-03
    • 2019-01-26
    • 1970-01-01
    相关资源
    最近更新 更多