将值添加到JSON的顶部

时间:2013-11-27 14:38:05

标签: javascript json

我有JSON数据

var json = {"options": {
              "key1": "value2",
              "key2": "value2",
              "key3": "value3",
                }
            }

我想使用JavaScript添加一个有价值的密钥,但是我想让它像这样在顶部:

var json = {"options": {
              "new_key": "new_value",
              "key1": "value2",
              "key2": "value2",
              "key3": "value3",
                }
            }

我该怎么做?

5 个答案:

答案 0 :(得分:4)

对象不保证JavaScript中的属性顺序,但是数组可以。如果订单真的很重要并允许您更改JSON结构,我建议您使用数组来组织数据。

var json = {
    "options": [
        {"key": "key1", "value": "value1"},
        {"key": "key2", "value": "value2"},
        {"key": "key3", "value": "value3"}
    ]
};

使用此方法,您可以使用unshift方法将元素推送到数组的开头。

json.options.unshift({"key": "new_key", "value": "new_value"});

答案 1 :(得分:3)

虽然任何ECMAScript规范都不要求它,但是大多数实现都保留了对象中原始的键顺序,但带有数值的键除外。您可以在此处查看有关Chrome实施的冗长讨论:http://code.google.com/p/v8/issues/detail?id=164

如果要使用它,则需要创建一个新对象:

var newOpts = {};
newOpts["new_key"] = "new_value";
for (var k in json.options) {
    newOpts[k] = json.options[k];
}
json.options = newOpts;

但是,如果您实际上将对象转换为JSON字符串并将其发送给其他人,无法保证在将字符串解析回Object时保留顺序。

我很惊讶地发现广泛使用的NodeJS Express库实际上依赖于format方法的这种行为。

答案 2 :(得分:1)

JSON对象没有订单。 如果订单对您很重要,请考虑将选项创建为数组,然后您可以按特定顺序迭代和添加项目:

var json = {"options": [
              {key: "new_key", value: "new_value"},
              {key: "key1", value: "value2"},
              {key: "key2", value: "value2"},
              {key: "key3", value: "value3"},
            ]}

答案 3 :(得分:1)

您可以使用vanilla JavaScript以下列方式扩展对象,但同样不会像其他人所说的那样设置顺序。

extend = function(destination, source) {   
    for (var property in source) {
        destination[property] = source[property];
    }
    return destination;
};

var json = {
    "options": {
        "key1": "value1",
        "key2": "value2",
        "key3": "value3"
    }
};

extend(json.options, {"new_key": "new_value"});

答案 4 :(得分:0)

您可以使用extend function对象的排序将决定首先写入哪些参数,但正如DanFromGermany所述,订单相关的现实案例并不多。