2013-03-12 3 views
0

У меня есть JSON данные, как этотКак изменить структуру JSON

{ 
    "nodes": [ 
     { 
      "node": { 
       "title": "Kieu Oanh", 
       "Image": "", 
       "view_node": "view", 
       "link": "drupal_dev/content/kieu-oanh" 
      } 
     }, 
     { 
      "node": { 
       "title": "Kieu Oanh", 
       "Image": "", 
       "view_node": "view", 
       "link": "drupal_dev/content/kieu-oanh" 
      } 
     }, 

    ] 
} 

Теперь я хочу, чтобы преобразовать его в

var rel_data = [{ 
    "title": "asa", 
    "Image": "sasa", 
    "view_node": "sajsjla" 
}, { 
    "title": "asa", 
    "Image": "sasa", 
    "view_node": "sajsjla" 
}] 

И Это мой код для преобразования данных в rel_data

data = data.nodes; 
for (d in data) { 
    rel_data[d].title = data[d].node.title; 
    rel_data[d].image = data[d].node.Image; 
} 
for (d in rel_data) { 
    alert(rel_data[d].title); 
} 

Но это не работает, есть ли что-то не так в моем коде?

+0

Это не имеет ничего общего с JSON. –

ответ

3

Вы пытаетесь редактировать объекты, которых еще нет.

Первое, что вы делаете, это доступ rel_data, пока нет rel_data. Второе, что вы делаете, это то, что вы изменяете свойства элементов массива, которые не существуют.

Ваш код должен быть следующим работать:

data = data.nodes; 
rel_data = new Array(); // Create rel_data 
for(d in data) { 
     rel_data[d] = new Object(); // Create array element 
     rel_data[d].title= data[d].node.title; 
     rel_data[d].image= data[d].node.Image; 
} 

for(d in rel_data) { 
     alert(rel_data[d].title); 
} 
2

Вы также можете использовать map вместо for петли (для создания нового массива, вы хотите один для alert())

var rel_Data = data.nodes.map(function(item) { 
    return { 
     "title": item.node.title, 
     "Image": item.node.Image, 
     "view_node": item.node.view_node 
    }; 
}); 
Смежные вопросы