我正在尝试迭代简单的json数组,但它总是返回数组的长度为 undefined 。
var chatmessage = {};
...................
...................
socket.on('listmessage', function(mesg){
chatmessage={"message":"Hello", "to":"sjdfjhsdf"};
});
socket.on('private', function(mesg){
console.log(chatmessage.length+' - '+chatmessage.message +' - '+ chatmessage.to);
});
当私人事件获得触发时,它返回
undefined - Hello - sjdfjhsdf
我认为它将长度关键字视为json数组键,如 {“length”:40} 。
我尝试了 Object.keys(chatmessage).length ,但它返回了总数键值( 2 ),但我只有一条记录。
在节点js中迭代json的正确方法是什么
答案 0 :(得分:4)
我正在尝试迭代简单的json数组
那里有两个问题:
那不是JSON。 JSON是用于数据交换的文本符号。如果您正在处理JavaScript源代码,而不是处理字符串,那么您就不会处理JSON。它是一个JavaScript对象初始化程序。
它没有定义数组,它定义了一个对象。
对象没有length
属性。如果您希望chatmessage
说明它有多少属性,您必须明确添加第三个属性(然后提出值应该是2还是3 :-)的问题)。或者,您可以使用" key"将其设为一个对象数组;和"价值"属性,但这将很难处理。
如果需要,您可以通过以下几种方式确定对象有多少属性:
Object.keys(obj).length
会告诉您对象具有多少拥有的,可枚举的属性(如果您正在使用ES2015,则忽略任何Symbol
个名称) 。该数字不包括任何继承的属性或任何不可枚举的属性。你的例子中的答案是2。
Object.getOwnPropertyNames(obj).length)
会告诉您该对象有多少拥有的属性,无论它们是否可枚举(但再次忽略任何Symbol
个名称)。该数字不包括任何继承的属性或任何不可枚举的属性。您的示例中的答案将再次为2,因为您的对象没有不可枚举的属性。
我尝试了
Object.keys(chatmessage).length
,但它返回了总数键值(2),但我只有一条记录。
如上所述,Object.keys
会告诉您对象拥有多少个可枚举的属性。如果您要查找有多少对象,答案是1。
如果你的目标是发送数组的聊天消息,那么你想要像这样创建:
var chatmessages = [
{"message":"Hello", "to":"sjdfjhsdf"}
];
它定义了一个带有一个条目的数组:一个表示聊天消息的对象。多个将使用,
分隔:
var chatmessages = [
{"message":"Hello", "to":"sjdfjhsdf"}, // First message
{"message":"Hello again", "to":"sjdfjhsdf"} // Second message
];
请注意,如果你这样做,你的动词应该是listmessages
(复数),而不是listmessage
。 (我提到这个,以防你的母语处理复数与英语不同;有一个很多不同的方式复数在地球上的各种人类语言中处理。:-))