【发布时间】:2013-03-23 19:10:45
【问题描述】:
我有一个休息服务,我将 Json 数据作为["1","2","3"](字符串列表)发送,这在 Firefox 休息客户端插件中工作正常,但是在应用程序中发送数据时,结构是 {"0":"1","1":"2","2":"3"} 格式,而且我无法传递数据,如何将{"0":"1","1":"2","2":"3"} 转换为["1","2","3"] 以便我可以通过应用程序发送数据,任何帮助将不胜感激。
【问题讨论】:
我有一个休息服务,我将 Json 数据作为["1","2","3"](字符串列表)发送,这在 Firefox 休息客户端插件中工作正常,但是在应用程序中发送数据时,结构是 {"0":"1","1":"2","2":"3"} 格式,而且我无法传递数据,如何将{"0":"1","1":"2","2":"3"} 转换为["1","2","3"] 以便我可以通过应用程序发送数据,任何帮助将不胜感激。
【问题讨论】:
如果 json 的格式是 { "index" : "value" },也就是我在 {"0":"1","1":"2","2":"3"} 中看到的格式,那么我们可以利用该信息,您可以这样做:
var myObj = {"0":"1","1":"2","2":"3"};
var convertToList = function(object) {
var i = 0;
var list = [];
while(object.hasOwnProperty(i)) { // check if value exists for index i
list.push(object[i]); // add value into list
i++; // increment index
}
return list;
};
var result = convertToList(myObj); // result: ["1", "2", "3"]
见小提琴:http://jsfiddle.net/amyamy86/NzudC/
使用虚假索引“迭代”列表。请记住,如果索引中断,这将不起作用,不能这样:{"0":"1","2":"3"}
【讨论】:
您需要将 json 解析回 javascript 对象。正如其他贡献者之一已经指出的那样,dojo 的后续迭代中有解析工具,但是大多数浏览器都支持JSON.parse(),这是在 ECMA-262 第 5 版(JS 所基于的规范)中定义的。它的用法是:
var str = your_incoming_json_string,
// here is the line ...
obj = JSON.parse(string);
// DEBUG: pump it out to console to see what it looks like
a.forEach(function(entry) {
console.log(entry);
});
对于不支持JSON.parse()的浏览器,你可以使用json2.js来实现它,但是既然你实际使用的是dojo,那么dojo.fromJson()是你的选择。 Dojo 会为您处理浏览器的独立性。
var str = your_incoming_json_string,
// here is the line ...
obj = dojo.fromJson(str);
// DEBUG: pump it out to console to see what it looks like
a.forEach(function(entry) {
console.log(entry);
});
如果您使用的是 AMD 版本的 Dojo,那么您需要返回 Dojo 文档并查看 dojo.fromJson 页面上的 dojo/_base/json 示例。
【讨论】: