将多维对象数组转换为JSON

时间:2013-12-30 17:35:23

标签: javascript json google-maps angularjs

我有一个对象数组,我想将其转换为JSON字符串,但我收到以下错误:JavaScript exception :Uncaught TypeError: Converting circular structure to JSON

据我所知,这是因为引用中有一个循环。我在这里搜索了解决方案,有人提出了“替换功能”。这看起来像这样:

var cache = [];
    JSON.stringify(o, function(key, value) {
        if (typeof value === 'object' && value !== null) {
            if (cache.indexOf(value) !== -1) {
                // Circular reference found, discard key
                return;
            }
            // Store value in our collection
            cache.push(value);
        }
        return value;
    });
    cache = null; // Enable garbage collection

但使用此方法会出现以下错误:Maximum call stack size exceeded

我认为这个解决方案并不真正符合我的需求,因为我对我想要转换的数组的所有元素都不感兴趣。这些元素被添加为第三方(谷歌地图),所以我对他们的子对象没有影响。

这是我的数组对象的屏幕截图:

enter image description here

我只对以下项目感兴趣:

Tour
  -id
  -name
  -days :
      -id
      -name
      -markers :
          -dayId
          -title
          -position :
              -nb
              -ob
      -thumbs :
         - 0
         - 1
         - ...

因为对象数组是由几个函数/服务/工厂创建的,所以难以制作小提琴或提供一些代码示例。

如果将这样的数组转换为JSON的任何消息都是值得欢迎的,感谢提前

1 个答案:

答案 0 :(得分:1)

对于任何有兴趣的人,我最终只使用我需要的元素制作自己的数组:

function CreateJson(tour){
    var sJson = {};

    sJson.name = tour.name;
    sJson.id = tour.id;
    sJson.days = [];
    sJson.markers = [];
    sJson.thumbs = [];

    for(i = 0; i < tour.days.length; i++){
        sJson.days.push({
            id: tour.days[i].id,
            name: tour.days[i].name
        });
        for(j = 0; j < tour.days[i].markers.length; j++){
            sJson.markers.push({
                id: tour.days[i].markers[j].id,
                dayId: tour.days[i].markers[j].dayId,
                name: tour.days[i].markers[j].title
            });
        }
        for(k = 0; k < $scope.thumbs.length; k++){
            sJson.thumbs.push($scope.thumbs[k])
        }
    };