JavaScript自定义数据阵列到JSON

时间:2011-12-28 14:39:02

标签: javascript json

我曾尝试编写一个实用程序函数,可以将我的自定义数据(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

1 个答案:

答案 0 :(得分:1)

您是否有任何理由不使用本机JSON.stringify()方法或您喜欢的JavaScript / AJAX库提供的(包装)版本?它们将更加强大,经过测试,安全且性能更佳。 (如果可用的话,大多数库版本只会调用浏览器的本机方法。)

您的toJSON实现可能适用于您的简单测试数据,但由于多种原因而无法处理更复杂的数据类型,但最有可能最重要的是,因为它无法解释任何类型的嵌套。它假定顶层始终是一个数组,并且数组中的每个元素只有一层深度的属性。看看https://github.com/douglascrockford/JSON-js/blob/master/json.js。这是由JSON的“父亲”Douglas Crockford提供的实现。几乎所有显示的内容都是有效实现所必需的。不幸的是,如果你认为你可以在很短的时间内(没有复制和粘贴)轻松简单地重新创建它,那么你就有可能对你不利。