JavaScript/jQuery:按相同顺序解析JSON

4

I have the following json object.

var json1 = {"00" : "00", "15" : "15", "30" : "30", "45" : "45"};

我正在准备一个选择元素来解析上述JSON,代码如下:
var selElem = $('<select>', {'name' : name, 'grp' : grp});
for(key in json1)
    selElem.append($('<option>', {value:key, text: json1 [key]}));

但是创建的选择元素如下所示。
<select>
    <option value="15">15</option>
    <option value="30">30</option>
    <option value="45">45</option>
    <option value="00">00</option>
</select>

这里的问题是json1对象包含00作为第一个元素,但在select元素中它是最后创建的。有没有解决这个问题的方法或解决方案?

1
解决方法是不行的,绕过去吧。http://www.json.org/说:“对象是一个无序的名称/值对集合”,JSON不能保证顺序。 - Andreas Wong
1个回答

6

如果你想保持顺序,请使用数组:

var json1 = [{val:"00",txt:"00"}, 
             {val:"15",txt:"15"}, 
             {val:"30",txt:"30"}, 
             {val:"45",txt:"45"}];

并且循环它:

var selElem = $('<select>', {'name' : name, 'grp' : grp});
for(var i=0;i<json1.length;(i+=1)){
    selElem.append($('<option>', {value:json1[i].val, text: json1[i].txt})); 
}

Check this jsfiddle


你的解决方案很好... 但是 json1[i].valjson1[i].txt 返回未定义... - Sandeep
你可能没有更新你的JSON源,从根本上讲这就是问题所在...对象属性枚举不一定按照属性的首次定义顺序。 - meandmycode
@Sandeep:在我的回答中添加了一个 jsfiddle 链接。 - KooiInc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接