下面我有以下代码:
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"}}
这里发生了什么?!?!?
前三个警报(显示imageType
,uploadReason
和fileKey
分配)符合预期,但iVO
对象根本不像我预期的那样起作用。 JSON.stringify
方法是普通的json2.js
方法,我没有对其进行修改。
为什么“新季”会显示为每个iVO["images"]
字段值?为什么iVO
分配工作不正常?!? 我需要做些什么来解决这些问题?
JSON.stringify(iVO)
的所需输出(以漂亮的打印形式):
{
"images":
{
"b2fc":
{
"imageType":"BoxArt",
"uploadReason":"New season",
"fileKey":"b2fc"
}
}
}
提前致谢!
答案 0 :(得分:1)
我想你想要
iVO['images'][thisImage] = {
"imageType":"BoxArt",
"uploadReason":"New season",
"fileKey":"b2fc"
};
我会写为
iVO.images[thisImage] = {
"imageType":"BoxArt",
"uploadReason":"New season",
"fileKey":"b2fc"
};
对于带有点的字段名称,没有神奇的自动取消/生成子对象。
答案 1 :(得分:1)
肯定,你定义的地方
iVO["images"][thisImage.fileKey] = thisImage;
iVO["images"][thisImage.imageType] = imageType;
iVO["images"][thisImage.uploadReason] = uploadReason;
thisImage
是之前分配给fileKey
的字符串,因此thisImage.fileKey
,thisImage.imageType
和thisImage.uploadReason
是无效的引用
可能你想做iVO["images"][fileKey]["imageType"] = imageType