Добавление данных в JSON
Добрый день.
Перерыл весь интернет и посмотрел несколько уроков для ликбеза по json но не нашел ответа на свой вопрос есть json код который я получаю через ajax к примеру такой [ {"Itemid":35, "name":"test", "hide":0 }, {"Itemid":36, "name":"test22", "hide":0 }, {"Itemid":37, "name":"test33", "hide":0 }, {"Itemid":38, "name":"test32", "hide":0 } ] Мне надо вставить в строку с Itemid 37 вставить такое [{"Itemid":39, "name":"test44", "hide":0 }, {"Itemid":40, "name":"test55", "hide":0 }] чтоб получилось так [ {"Itemid":35, "name":"test", "hide":0 }, {"Itemid":36, "name":"test22", "hide":0 }, {"Itemid":37, "name":"test33", "hide":0, "parent": [{"Itemid":39, "name":"test44", "hide":0 }, {"Itemid":40, "name":"test55", "hide":0 }] }, {"Itemid":38, "name":"test32", "hide":0 } ] единственное что накопал - через concat - но это совсем не то Скажите хотя б куда посмотреть пожалуйста Заранее благодарен. |
dmi,
а запятые где? |
dmi,
циклом обнаружить нужный элемент в массиве и по его индексу добавить нужное свойство в элемент. |
Цитата:
Только циклом? громоздкое получится решение. |
dmi,
<script> var json = [ {"Itemid":35, "name":"test", "hide":0 }, {"Itemid":36, "name":"test22", "hide":0 }, {"Itemid":37, "name":"test33", "hide":0 }, {"Itemid":38, "name":"test32", "hide":0 } ], arr = [{"Itemid":39, "name":"test44", "hide":0 }, {"Itemid":40, "name":"test55", "hide":0 }] json.some(function(a) { return a.Itemid == 37 && (a.parent = arr) }) document.write(JSON.stringify(json)) </script> |
рони,
Благодарю, уже копаю в эту сторону |
Цитата:
но не суть - попробовал метод Рони и он сработал. Но если я с помощью его функции к примеру хочу добавить еще одну вложенность скажем тоже самое после Итем 39 - то ничего не работает пример для понимания [ {"Itemid":35, "name":"test", "hide":0 }, {"Itemid":36, "name":"test22", "hide":0 }, {"Itemid":37, "name":"test33", "hide":0, "parent": [{"Itemid":39, "name":"test44", "hide":0 "parent": [{"Itemid":41, "name":"test45", "hide":0 }, {"Itemid":42, "name":"test56", "hide":0 }] }, {"Itemid":40, "name":"test55", "hide":0 }] }, {"Itemid":38, "name":"test32", "hide":0 } ] |
dmi, тогда так:
[{ "Itemid":35, "name":"test", "hide":0 },{ "Itemid":36, "name":"test22", "hide":0 },{ "Itemid":37, "name":"test33", "hide":0, "childId": [39,40] },{ "Itemid":38, "name":"test32", "hide":0 },{ "Itemid":39, "name":"test44", "hide":0 },{ "Itemid":40, "name":"test55", "hide":0 }] или так: [{ "Itemid":35, "name":"test", "hide":0 },{ "Itemid":36, "name":"test22", "hide":0 },{ "Itemid":37, "name":"test33", "hide":0 },{ "Itemid":38, "name":"test32", "hide":0 },{ "Itemid":39, "name":"test44", "hide":0, "parentId":37 },{ "Itemid":40, "name":"test55", "hide":0, "parentId":37 }] или всё вместе |
dmi,
так идите по дереву ищите нужное |
Rise,
вопрос как с помощью функции туда поместить, а не как правильно написать слово parent или child ) В принципе через some работает - но не подходит для многомерного массива при попытке обратится к элементу в духе a.parent.Itemid - ничего не происходит |
dmi,
<script> var json = [ {"Itemid":35, "name":"test", "hide":0 }, {"Itemid":36, "name":"test22", "hide":0 }, {"Itemid":37, "name":"test33", "hide":0 }, {"Itemid":38, "name":"test32", "hide":0 } ], arr = [{"Itemid":39, "name":"test44", "hide":0 }, {"Itemid":40, "name":"test55", "hide":0 }] var indx = 0, a = json; a.some(function(a, i) { return a.Itemid == 37 && (indx = i) }) a = a[indx]; a.parent = arr; //строка для теста a = a.parent; a.some(function(a, i) { return a.Itemid == 39 && (indx = i) }) a = a[indx]; a.parent = "abrarkadbra"; document.write(JSON.stringify(json)) </script> |
рони,
Тебе отдельное спасибо за напутствия, в итоге написал рекурсивную функцию, где то в ней есть бок - иногда дублируются значения - найду ошибку исправлю. Для тех кто будет биться над подобной проблемой - оставлю ее тут. items - начальный json массив itemid - ид товара в который вгружать данные data - собственно данные которые надо загрузить function putItems (items, itemid, data) { var i = 0; for (i = 0; i < items.length; i++) { if (items[i].Itemid == itemid) { items[i].parent = data; return items; } var item = putItems(items[i].parent, itemid, data); if (item != null) { return items.concat(item); } } return null; } |
Часовой пояс GMT +3, время: 23:16. |