2013-12-30 6 views
1

У меня есть массив объекта, который я хочу, чтобы преобразовать в JSON строку, но я получаю следующее сообщение об ошибке: JavaScript exception :Uncaught TypeError: Converting circular structure to JSONПреобразования многомерного массива объекта в JSON

Из того, что я понимаю, что это потому, что есть цикл в ссылках. Я искал здесь на SO для решений, и кто-то придумал «функцию замены». это выглядело примерно так:

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.

Я думаю, что это решение действительно не соответствует моим потребностям, потому что меня не интересуют все элементы массива, которые я пытаюсь преобразовать. Эти элементы добавлены сторонними (google maps), поэтому я не влияю на их дочерние объекты.

Это скриншот моего объекта массива:

enter image description here

Я заинтересован только в следующих пунктах:

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

, потому что массив объектов создается несколько функций/услуг/фабрик трудно составить скрипку или предоставить некоторые образцы кода.

Любое предложение приемлемо, как преобразовать массив как это JSON приветствуется, спасибо заранее

ответ

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]) 
     } 
    }; 
Смежные вопросы