读JavaScript对象需要JSON转换

时间:2013-03-06 17:21:54

标签: javascript json object

我有一个javascript对象。

var homeObject=JSON.parse(JSON.stringify(BuildingObject));
var flatNumber=homeObject.flatNo;

那么,有没有办法在没有JSON转换的情况下直接获取 flatNo 属性。

另外,再补充说明:

如果直接访问,

BuildingObject.flatNo将返回undefined,而不进行JSON转换

BuildingObject的JSON输出列在下面

{

    "flatNo": "34",
    "objectId": "4oRaVl96ZQ",
    "createdAt": "2013-03-01T17:35:27.724Z",
    "updatedAt": "2013-03-01T17:40:45.804Z"
}

仍然感到惊讶!它打印出BuildingObject.createdAtBuildingObject.updatedAt。 问题在于字符串对象“flatNo”和“objectId”

2 个答案:

答案 0 :(得分:2)

问题很可能源于JSON.stringify()将首先尝试在对象上调用toJSON(),因此toJSON()很可能添加的属性不是原始对象的键。 e.g。

var test = {
    toJSON: function () {
        return {
            foo: "bar"
        };
    }
};

console.log(JSON.stringify(test));
// outputs: {"foo":"bar"} 

console.log(test.foo);
// outputs: undefined

console.log(test.toJSON().foo);
// outputs: bar

所以在你的情况下你可以:

a)检查您的BuildingObject是否具有flatNo的某种访问函数,例如BuildingObject.get( 'flatNo')

b)使用BuildingObject.toJSON()。flatNo

答案 1 :(得分:1)

如果BuildingObject是包含名为flatNo的属性的对象,则可以使用标准JavaScript语法读取该属性:

  • BuildingObject.flatNo
  • BuildingObject["flatNo"]

测试代码:

var BuildingObject = {
    flatNo: 314
};
console.log(BuildingObject.flatNo, BuildingObject["flatNo"]);

...按预期打印:

  

314 314

在处理JavaScript对象时绝对不需要使用JSON。尽管人们普遍相信,JSON只不过是一种受JavaScript语法启发的纯文本数据格式。 JSON不是JavaScript而且没有“JSON对象”这个术语(你可以在StackOverflow上引用JavaScript对象的无穷无尽的问题中读到这个术语),因为如果它是JSON则是一个字符串。

如果BuildingObject.flatNo为您返回undefined,那么BuildingObject不包含您的想法,或者您的测试在某个地方存在漏洞。