1

私のJavaコードには、タイプがoのメンバーを持つクラスがありMap<String,String>ます。私はグーグルGsonライブラリを使用してオブジェクトからjson文字列とその逆に変換します。

javascriptとjson.orgのJSONライブラリでも同じことをしたいと思います。

問題は、javascriptに「マップオブジェクト」がないことです。配列を使用してマップをエミュレートすると、配列に対するJSON.stringifyの結果がGsonoverと同じになりませんMap<String,String>

また、ライブラリjshashtable 2.1(http://www.timdown.co.uk/jshashtable/index.html)のHashtable javascriptオブジェクトを使用して、カスタムtoJSONメソッドを作成しようとしましたが、JSONがこれらで行うため、このアプローチは機能しませんでした。 Casesは、カスタムtoJSONメソッドによって返されるオブジェクトを文字列化します。

これは私が得るものです:

javaとGsonの場合:

{
    "var_1": "value_1",
    "var_2": "value_2",
    "map": {
        "name_1": "value_1",
        "name_2": "value_2"
    }
}

javascriptとJSONの場合:

{
    "var_1": "value_1",
    "var_2": "value_2",
    "map": [
        ["name_1", "value_1"],
        ["name_2", "value_2"]
    ]
}

これを解決して、javaとjavascriptから同じ「json文字列」を取得する方法はありますか?

前もって感謝します...

4

1 に答える 1

1

問題は、javascript が「マップ オブジェクト」を持っていないことです...

はい、そうです。すべてのJavaScript オブジェクトはマップです。探しているものを取得するには、次のオブジェクト グラフを作成します。

var obj = {
    "var_1": "value_1",
    "var_2": "value_2",
    "map": {
        "name_1": "value_1",
        "name_2": "value_2"
    }
};

...そしてその上で使用JSON.stringifyします。

var json = JSON.stringify(obj);

その少し後var obj =は見覚えがありますか?これは JavaScriptオブジェクト初期化子であり、JSON はオブジェクト初期化子構文のサブセットであるためです。:-) 必要に応じて、他の方法でそのオブジェクトを構築できます。

var obj = {};
obj.var_1 = "value_1";
obj.var_2 = "value_2";
obj.map = {};
obj.map.name_1 = "value_1";
obj.map.name_2 = "value_2";

...呼び出した後も同じことが得られますJSON.stringify

于 2012-05-25T12:30:24.557 に答える