0

json文字列をマップにデコードしようとしています。

このような質問がたくさんあったことは知っていますが、かなり具体的な形式が必要です。たとえば、json文字列があります:

{
    "map": {
        "a": "b",
        "c": "d",
    },
    "map2": {
        "aa": "bb",
        "cc": "dd",
    },
    "something": "a",
    "something2": "b"
}

そして、次のような結果が必要です。

"map.a" => "b"
"map.c" => "d"
"map2.aa" => "bb"
"map2.cc" => "dd"
"something" => "a"
"something2" => "b"

キーにドットが含まれていないことを確認してください。いくつかの JSON ライブラリを調べましたが、デコードして Java マップに格納するためだけに、それほど多くの関数は必要ありません。簡単な方法がない場合は、独自のアルゴリズムを作成します。それほど難しくないことを願っています...

助けてくれてありがとう。

4

3 に答える 3

1

使用しorg.codehaus.jacksonました。以下をせよ:

    HashMap<String, Object> content = null;
    HashMap<String, String> result = new HashMap<String, String>();

    try {
        JsonFactory factory = new JsonFactory();
        ObjectMapper mapper = new ObjectMapper(factory);
        TypeReference<HashMap<String, Object>> typeRef = new TypeReference<HashMap<String, Object>>() {
        };
        content = mapper.readValue(jsonString, typeRef);

    } catch (Exception ex) {
        System.out.println("Exception : " + ex);
    } 
    // now content has everything inside
    for(String s : content.keySet()){
        Object obj = content.get(s);
        if(obj instanceof String){
            result.put(s, (String)obj);
        } else {
            HashMap<String,String> hm = (HashMap<String,String>)obj;
            for(String s2: hm.keySet()){
                result.put(s+"."+s2, hm.get(s2));
            }

        }
    }

編集:テスト済み、動作中

于 2013-04-02T15:36:43.243 に答える
1

JSON を正確に解析するには、適切なパーサーを定義する必要があります。それらを記述するのはそれほど難しくなく、時間がかかります。私のお勧めは、かなり軽量な JSON パーサーを見つけて、探しているマップ形式を取得するためのデコレーターを作成することです。ただし、大量の JSON を処理している場合は、残念ながらオーバーヘッドが追加されます。

于 2013-04-02T15:04:50.560 に答える
1

これは非標準の表現であるため、すぐに使える解決策は見つからないと思います。私の提案は、JSON ライブラリを使用して JSON 文字列を Java Map に変換し、その Map の深さ優先走査を実行して目的の表現に変換することです。

于 2013-04-02T15:04:58.980 に答える