1

次のような JSON 文字列があります。

[
    {"TypeName":"Double","TypeID":14},
    {"TypeName":"Single","TypeID":43},
    {"TypeName":"Family","TypeID":7}
]

KnockOut でこの関数を呼び出した後に生成されます。

self.save = function() {
    var dataToSave = $.map(self.lines(), function(line) {
        return line.product() ? {
            TypeName: line.category().TypeName,
            TypeID: line.category().TypeID
            : undefined
});

alert(JSON.stringify(dataToSave));

ただし、サーバーに戻す前に、モデルにさらに 3 つの情報を追加して、名前、電子メール、電話番号も送信したいと考えています。

{
    "Name":"Mark",
    "Email":"me@me.com",
    "Tel":"0123456789",
    "Rooms":
        [
            {"TypeName":"Double","TypeID":14},
            {"TypeName":"Single","TypeID":43},
            {"TypeName":"Family","TypeID":7}
        ]
}

この情報をJSONに追加する適切な方法はありますか、それとも次のように簡単ですか:

var toSend = "{\"Name\":\"Mark\":\"Email\":\"me@me.com\", \"Tel\":\"0123456789\",\"Rooms\":"
+ JSON.stringify(dataToSave) + "}"; 

ありがとうございました、

マーク

4

2 に答える 2

5

を使用して JSON 文字列をJSON.parse有効な JS オブジェクトに解析し、必要に応じてデータをオブジェクトに追加してJSON.stringifyから戻します。JSON 文字列はデータの単なる表現であるため、直接変更することに頼るべきではありません。

于 2013-03-22T15:58:55.393 に答える
3

実際に必要な構造を JSON エンコーダーに渡すことができるのに、なぜ JSON にエンコードしてから結果の文字列を変更するのでしょうか?

var toSend = JSON.stringify({
    Name: "Mark",
    Email: "me@me.com",
    Tel: "0123456789",
    Rooms: dataToSave
});
于 2013-03-22T16:00:13.197 に答える