1

以下に示すように、Java で JSON を解析し、JSON キー/ノードの階層パスを表示する必要があるプロジェクトに取り組んでいます。

Jackson APIを使用してJavaでこのプログラムを開発していますが、JSONから現在のキー/ノードの階層パスを返す、すぐに利用できるAPIを取得できません。

JSON データ-

{“tomcat-users”:
    {
        “role”:[
            {“@rolename”:”manager-gui”},
            {“@rolename”:”manager-script”},
            {“@rolename”:”manager-jmx”},
            {“@rolename”:”manager-status”}
        ],
        ”user”:{
            “@username”:”admin”,
            ”@roles”:”manager-gui,manager-script”,
            ”@password”:”admin”
        }
    }
}

出力は次のようになります-

Column 1                                        Column 2
---------------------------------------------------------------------------
tomcat-users -> role[1] -> @rolename            manager-gui
tomcat-users -> role[2] -> @rolename            manager-script
tomcat-users -> role[3] -> @rolename            manager-jmx
tomcat-users -> role[4] -> @rolename            manager-status
tomcat-users -> user -> @username               admin
tomcat-users -> user -> @roles                  manager-gui,manager-script
tomcat-users -> user -> @password               admin

誰でも教えてもらえますか、パスを返す API はありますか?

私のJavaコード -

public static void generateJsonPath(JsonNode node) {
     Iterator<String> fieldNames = node.getFieldNames();
     while(fieldNames.hasNext()){
         String fieldName = fieldNames.next();
         JsonNode fieldValue = node.get(fieldName);
         if (fieldValue.isObject()) {
            System.out.println(fieldName + " -> ");
            generateJsonPath(fieldValue);
         } else if(fieldValue.isArray()) {
             System.out.println(fieldName + " -> ");
             Iterator<?> iterator = fieldValue.getElements();
             while(iterator.hasNext()) {
                 generateJsonPath((JsonNode) iterator.next());
             }
         } else {
            String value = fieldValue.asText();
            System.out.println(fieldName + " : " + value);
         }
     }
}

Java コードの結果 -

tomcat-users -> 
role -> 
@rolename : manager-gui
@rolename : manager-script
@rolename : manager-jmx
@rolename : manager-status
user -> 
@username : root
@password : root
@roles : manager-gui,manager-script,manager-jmx,manager-status
4

0 に答える 0