Array Key未在节点js中添加

时间:2016-03-08 06:36:58

标签: arrays node.js mongodb mongoose

你好,我是节点js的新手。我想添加一个带有结果数组的键并将其打印在json数组中。

connection.modal.find( { 'id' : '2' }, function ( err, result ) {
    var response = {};

    result['add_key'] = 'abcdd';
    response['success'] = true;
    response['result'] = result;
    response['msg'] = 'Result fetched';
    res.json(response);
});

没有 add_key

打印

3 个答案:

答案 0 :(得分:0)

JSON数组数据类型不能在数组上包含命名键。

  

普通JavaScript数组旨在使用数字保存数据   索引。您可以将命名键填充到它们上(这可能很有用   当你想存储关于保持正常的数组的元数据时,   有序的,数字索引的数据),但这不是它们的本质   专为而设计。

如果需要命名键,请使用Object,而不是数组。

var test = {};           // Object
test['a'] = 'test';
test['b'] = [];          // Array
test['b'].push('item');
test['b'].push('item2');
test['b'].push('item3');
var json = JSON.stringify(test);
alert(json);

答案 1 :(得分:0)

虽然Javascript数组可以具有自定义属性,例如您正在使用以下代码行:

result['add_key'] = 'abcdd';

JSON.stringify()(因此res.json())也只会在生成的JSON中放入实际的数组元素(不是自定义属性)。因此,如果result是一个数组,那么这个属性就不会在生成的JSON中显示。

实际上,JSON文本格式只能为数组的JSON格式提供数组元素。没有像['add_key]属性这样的常规自定义属性的位置。该属性必须位于一个普通对象上才能在JSON中显示。

  

在描述数组的section 7 of the JSON specification中,   它清楚地表明数组的唯一JSON表示是   数组元素本身(以逗号分隔)。在数组的表达式中没有属性名称/值对的位置。

您没有准确显示您希望生成的JSON的样子,但是您可以通过其他几种方式来表示add_key属性和值。您可以将属性移动到response对象:

connection.modal.find( { 'id' : '2' }, function ( err, result ) {
    var response = {};

    response['add_key'] = 'abcdd';
    response['success'] = true;
    response['result'] = result;
    response['msg'] = 'Result fetched';
    res.json(response);
});

您可以将结果放入其自己的对象中,该对象可以包含add_key属性:

connection.modal.find( { 'id' : '2' }, function ( err, result ) {
    var response = {};
    var resultContainer = {};

    resultContainer['add_key'] = 'abcdd';
    resultContainer['result'] = result;
    response['success'] = true;
    response['result'] = resultContainer;
    response['msg'] = 'Result fetched';
    res.json(response);
});

仅供参考,您不必通常使用括号语法来设置属性。你也可以这样做(许多人觉得有点干净):

connection.modal.find( { 'id' : '2' }, function ( err, result ) {
    var response = {};

    response.add_key = 'abcdd';
    response.success = true;
    response.result = result;
    response.msg = 'Result fetched';
    res.json(response);
});

您必须使用括号语法的唯一情况是,属性名称是字符串变量还是包含点语法中不允许的某些字符。对于常规字母字符和不在变量中的属性名称,您只需使用点语法。

答案 2 :(得分:0)

Nodejs没有命名索引数组(关联数组)

对于相同的Nodejs具有Object数据类型,请使用它

根据您的情况

if (date.getDayOfWeek() == DayOfWeek.FRIDAY)
  System.out.println(date.toString() + " is Friday 13th");

我希望这会有所帮助