我曾尝试编写一个实用程序函数,可以将我的自定义数据(Sencha Touch商店使用的数据)转换为JSON格式,我差不多完成但是它失败了来自twitter API的复杂数据,但是对于简单类型的数据工作正常
自定义数据
var items = [];
for (var i = 0; i < 10; i++) {
var item = {};
var data = {};
data.prop1 = "123456789";
data.prop2 = "Some Name";
data.prop3 = "Some Date and Time";
item.data = data;
items.push(item);
}
现在,上面的数据可以循环访问,并可以使用以下函数转换为JSON。
function toJSON(items) {
var jsonString = "[";
for (var i = 0; i < items.length; i++) {
var item = items[i];
jsonString += "{";
for (var propertyName in item.data) {
jsonString += '"' + propertyName + '":' + '"' + item.data[propertyName] + '",';
}
if (jsonString.substr(jsonString.length - 1, 1) === ",") {
jsonString = jsonString.substr(0, jsonString.length - 1);
}
jsonString += "},";
}
if (jsonString.substr(jsonString.length - 1, 1) === ",") {
jsonString = jsonString.substr(0, jsonString.length - 1);
}
jsonString += "]";
return jsonString;
}
问题是我是否正在编码?
您可以看到这些小提琴获得实时体验http://jsfiddle.net/WUMTF/和http://senchafiddle.com/#gxtZ9
答案 0 :(得分:1)
您是否有任何理由不使用本机JSON.stringify()方法或您喜欢的JavaScript / AJAX库提供的(包装)版本?它们将更加强大,经过测试,安全且性能更佳。 (如果可用的话,大多数库版本只会调用浏览器的本机方法。)
您的toJSON
实现可能适用于您的简单测试数据,但由于多种原因而无法处理更复杂的数据类型,但最有可能最重要的是,因为它无法解释任何类型的嵌套。它假定顶层始终是一个数组,并且数组中的每个元素只有一层深度的属性。看看https://github.com/douglascrockford/JSON-js/blob/master/json.js。这是由JSON的“父亲”Douglas Crockford提供的实现。几乎所有显示的内容都是有效实现所必需的。不幸的是,如果你认为你可以在很短的时间内(没有复制和粘贴)轻松简单地重新创建它,那么你就有可能对你不利。