0

このようなデータがあります

{
    "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 Processor を使用しています。オブジェクトの下で行う必要があるのは、それぞれを独自のデータdataに抽出することです。data(x)

説明するのは難しいですが、詳しく説明します。私の意図は、お客様が JSON データを読みやすくすることです。data(x)そのため、各オブジェクトを Web サイトのブロック/テーブルに分割することで、JSON データをより使いやすくしようとしています。そのdata1ため、独立して表示されます。その後data2、独立して表示されます。したがって、この場合、4 つのdata(x)オブジェクトがあり、それらの 4 つのオブジェクトを 4 つの異なるオブジェクトに保存し、必要に応じてStrings表示したいと考えています。私の問題は、Jackson Processor にこれを実行させるにはどうすればよいかということです。

これが役立つかどうかはわかりませんが、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 は扱うのがかなり難しいパーサーのように見えるので、dataオブジェクトだけを抽出するために Javascript JSON パーサーを使用した方が簡単でしょうか? ジャクソンがJSONデータを文字列に変換しているので、Javascriptを使用するとうまくいきますか?

4

2 に答える 2

0

そのため、ドキュメントを実際に掘り下げた後、それを理解することができました。JsonNode必要なものを抽出するために使用する必要がありました。変数は、文字列を簡単に表示するためにあるだけで、すべての要素が下にあることに注意しappNameてくださいdata(x)iteNodedata(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;
}
于 2013-07-09T20:25:24.323 に答える