0

以下に次のコードがあります。

var imageType = "BoxArt";
var uploadReason = "New season";
var fileKey = "b2fc";

alert("imageType = " + imageType);
alert("uploadReason = " + uploadReason);
alert("fileKey = " + fileKey);

var iVO = { "images":{}};
var thisImage = fileKey;
iVO["images"][thisImage.fileKey] = thisImage;
iVO["images"][thisImage.imageType] = imageType;
iVO["images"][thisImage.uploadReason] = uploadReason;

alert("iVO['images'][thisImage.imageType] = " + iVO["images"][thisImage.imageType]);
alert("iVO['images'][thisImage.uploadReason] = " + iVO["images"]    [thisImage.uploadReason]);
alert("iVO['images'][thisImage.fileKey] = " + iVO["images"][thisImage.fileKey]);
alert("JSON.stringify(iVO):\n" + JSON.stringify(iVO));

これを実行すると、次の出力が得られます。

imageType = "BoxArt"
uploadReason = "New season"
fileKey = "b2fc"
iVO['images'][thisImage.imageType] = "New season"
iVO['images'][thisImage.uploadReason] = "New season"
iVO['images'][thisImage.fileKey] = "New season"
JSON.stringify(iVO):
{"images"}:{"undefined":"New season"}}

ここで何が起こっているのですか?!?!?

最初の3つのアラート(、、、imageTypeおよびuploadReason割り当てを表示fileKey)は期待どおりですが、iVOオブジェクトは期待どおりに動作していません。このJSON.stringify方法は通常のjson2.js方法であり、私はそれを変更していません。

「新シーズン」がすべてiVO["images"]のフィールド値として表示されるのはなぜですか?割り当てが正しく機能しないのはなぜiVOですか?!?それらを修正するには何をする必要がありますか?

の望ましい出力は次のJSON.stringify(iVO)ようになります(きれいな印刷形式で):

{
    "images":
    {
        "b2fc":
        {
            "imageType":"BoxArt",
            "uploadReason":"New season",
            "fileKey":"b2fc"
        }
    }
}

前もって感謝します!

4

2 に答える 2

1

私はあなたが欲しいと思います

iVO['images'][thisImage] = {
         "imageType":"BoxArt",
        "uploadReason":"New season",
        "fileKey":"b2fc"
    };

私はこれを次のように書きます

 iVO.images[thisImage] = {
         "imageType":"BoxArt",
        "uploadReason":"New season",
        "fileKey":"b2fc"
    };

ドットが含まれているフィールド名のサブオブジェクトの魔法の自動検出/活性化はありません。

于 2012-04-24T07:20:04.680 に答える
1

確かに、あなたが定義した場所

iVO["images"][thisImage.fileKey] = thisImage;
iVO["images"][thisImage.imageType] = imageType;
iVO["images"][thisImage.uploadReason] = uploadReason;

thisImagefileKeysoへの以前の割り当てによる文字列thisImage.fileKeythisImage.imageTypeありthisImage.uploadReason、無効な参照です

おそらくあなたは次のようなことをしたいでしょうiVO["images"][fileKey]["imageType"] = imageType

于 2012-04-24T07:22:19.433 に答える