【问题标题】:merging javascript arrays for json合并 json 的 javascript 数组
【发布时间】:2010-05-22 02:15:35
【问题描述】:

我将表单中的信息连续收集到数组中,如下所示:

list = {"name" : "John", "email" : "name@domain.com", "country" : "Canada", "color" : "blue"};  
identifier = "first_round";

list = {"name" : "Harry", "email" : "othername@domain.com", "country" : "Germany"};  
identifier = "second_round";

我想将它们组合成一些东西(我可能在需要括号的地方有大括号),例如:

list_all = {  
"first_round" :  
 {"name" : "John", "email" : "name@domain.com", "country" : "Canada", "color" : "blue"} ,  
"second_round" :  
{"name" : "Harry", "email" : "othername@domain.com", "country" : "Germany"}  
 };

所以我可以像这样访问它们:

alert(list_all.first_round.name) -> John

(注意:两个list-array中的name-values(“name”、“email”、“color”)并不完全相同,每个list-array中的项目数是有限的,但在提前;我需要每轮只向前一个结构连续添加一个数组,并且可能有任意数量的轮,即“第三轮”:{...},“第四轮”:{...}和等等。)

最终,我希望它能够很好地解析为 JSON。

如果有帮助,我会使用 jquery 库。

【问题讨论】:

  • 附带说明,如果您像for(var key in list_all) 那样枚举list_all 的属性,则无法保证属性的顺序。即使首先定义了“first_round”,您也可能在“first_round”之前获得“second_round”。如果您希望保留订单,请改用数组。见 - stackoverflow.com/questions/648139/…
  • 但是对象的属性顺序什么时候重要呢?如果顺序很重要,那么 Array 是要使用的类型。
  • @Sean - 当你想用一个键直接访问元素,但同时又想按顺序遍历所有元素时。认为有人可能想要它并不荒谬 - Ruby 在 1.9 中更改了 Hash 的实现以保证顺序,因为有人想要它。
  • 唯一的问题是 ES262-3 规范声明迭代是否有序取决于实现——你根本不能依赖它——所以你不应该依赖它。而且我仍然看不到任何人需要保持订单的原因。
  • 我实际上是在说同样的事情 - 您不应该依赖枚举属性的顺序。至于第二点,为什么有人想要使用键直接访问包含的对象以及对所有元素的有序访问,有很多例子。从宏观角度来看,考虑这一点 - 有无数个列表,其中顺序很重要,但同时列表中的每个项目都有一些独特的属性,基于这些属性可以立即且明确地识别它。为了表示这样的结构,我们需要保持顺序。

标签: javascript jquery json arrays


【解决方案1】:

如下创建list_all作为新对象:

var list_all = {};
list_all[identifier_1] = list_1;
list_all[identifier_2] = list_2;
// ...

【讨论】:

  • +1 - 或许值得注意的是,对于有效的 json(正如 OP 似乎想要的那样),可以使用 json2 库。 JSON.stringify(list_all)json.org/json2.js
  • 我花在这个上的所有时间——不知何故我错过了这个:工作完美,谢谢!
【解决方案2】:

JSON 使用对象文字表示法。形式:

var person = {
 "name": "Douglas Adams"
 "age": 42
};

与(出于所有意图和目的)完全相同:

var person = new Object();
person.name = "Douglas Adams";
person.age = 42;

这对你有帮助吗?

你也可以使用

person["age"]

这是一样的

person.age

并遍历命名属性:

//prints the person.propertyName for all propertyName in person
for (var propertyName in person) {
 alert(person[propertyName]);
}

您可以将数据作为字符串传输,使用它与服务器交互并将其转换为对象,使用 jQuery。例如:

var jsonString = "{'name': 'Douglas Adams', 'age': 42}";
jQuery.parseJson(jsonString); //returns this as an object

在 jQuery API 文档中搜索 JSON:http://api.jquery.com/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 2023-03-16
    • 2012-05-10
    • 1970-01-01
    • 2016-06-24
    • 2017-02-24
    • 1970-01-01
    相关资源
    最近更新 更多