提取特定的JSON对象并独立显示它们

时间:2013-07-08 22:17:22

标签: java json jackson

我的数据看起来像这样

{
    "status": "success",
    "data": {
        "data1": {
            "serialNumber": "abc123",
            "version": "1.6"
        },
        "data2": {
            "irrelvent": [
                "irrelvent",
                "irrelvent"
            ]
        },
        "data3": {
            "irrelevantLibs": {
                "irrelevantFiles": [
                    "irrelevant.jar",
                    "irrelevant.jar",
                    "irrelevant.jar"
                ]
            }
        },
        "data4": {
            "configuration": "auth"
        }
    }
}

我正在使用Jackson JSON处理器。我需要在data对象下执行的操作是将每个data(x)提取到自己的数据中。

很难解释,但我会尽力详细说明。我的目的是使JSON数据对我们的客户更具可读性。因此,我试图通过将每个data(x)对象拆分为网站上的块/表来使JSON数据更加友好。因此data1将独立显示。然后data2将独立显示,依此类推。所以在这种情况下,我有四个data(x)个对象,我想将这四个对象存储到四个不同的Strings中,然后按照我想要的方式显示它们。我的问题是如何让杰出处理器执行此操作?

不确定这是否有用但我当前用于处理JSON数据的JSON函数是:

public static String stringify(Object o) {
    try {
        ObjectMapper mapper = new ObjectMapper();
        DefaultPrettyPrinter printer = new DefaultPrettyPrinter();
        printer.indentArraysWith(new Lf2SpacesIndenter());
        return mapper.writer(printer).writeValueAsString(o);
    } catch (Exception e) {
        return null;
    }
}

我很肯定我可以操纵处理器来分离这些数据,但我不知道从哪里开始。

编辑:嗯,因为Jackson似乎是一个非常难以使用的解析器,如果我使用Javascript JSON解析器只提取data个对象会更容易吗?既然我已经让Jackson将JSON数据转换为字符串,那么使用Javascript会起作用吗?

2 个答案:

答案 0 :(得分:0)

“嗯,因为杰克逊似乎是一个非常难以使用的解析器,如果我使用Javascript JSON解析器只提取数据对象会更容易吗?”

看到你正在使用Java,你考虑过使用Sling吗? http://sling.apache.org/它是一个外部库,它允许您非常迅速地解析和探索JSON数据结构,而且最重要的是干净利落。

答案 1 :(得分:0)

所以我在真正深入研究文档后能够弄明白。我不得不使用JsonNode来提取我想要的东西。请注意,变量appName可供我轻松显示字符串data(x),而iteNode只是data(x)下的所有元素

public static List<String> jsonSplit(String o) throws JsonParseException, JsonMappingException, IOException {
    List<String> list = new ArrayList<String>();
    ObjectMapper mapper = new ObjectMapper();
    DefaultPrettyPrinter printer = new DefaultPrettyPrinter();
    printer.indentArraysWith(new Lf2SpacesIndenter());

    JsonNode rootNode = mapper.readValue(o, JsonNode.class); 
    Iterator<String> appName = rootNode.get("data").getFieldNames();
    Iterator<JsonNode> iteNode = rootNode.get("data").getElements();

    while (iteNode.hasNext()){
        list.add(appName.next());
        list.add(mapper.writer(printer).writeValueAsString(iteNode.next()));
    }

    return list;
}