Я использую SuperObject для создания и управления простой иерархической структурой в JSON.
Моя цель - преобразовать набор объектов {"id": ..., "name": ..., "parent": ...} в иерархическую структуру. Пример:
Я хочу преобразовать это
{"id": "0001","name": "item0001", "parent":""},
{"id": "0002","name": "item0002", "parent":""},
{"id": "0003","name": "item0003", "parent":""},
{"id": "0003.1","name": "item0003.1", "parent":"0003"},
{"id": "0003.1.1","name": "item0003.1.1", "parent":"0003.1"},
в это
{
"items": [
{
"id": "0001",
"name": "item0001"
},
{
"id": "0002",
"name": "item0002"
},
{
"id": "0003",
"name": "item0003",
"items": [
{
"id": "0003.1",
"name": "item0003.1",
"items": [
{
"id": "0003.1.1",
"name": "item0003.1.1"
}
]
}
]
}
]
}
(Эта структура может варьироваться, т. Е. Нет фиксированной модели. Это, вероятно, означает, что решение должно быть рекурсивным).
Я думаю, что способ достичь этого:
- для каждого добавляемого объекта,
- если нет родителя, добавьте его в вывод json, вверху;
- если есть родитель, найдите, где родитель находится в выводе json.
- добавить объект в выходной json под родительским элементом.
Для этого я искал способ получить путь к объекту, например
function findpathinObject(key:string, value:string, object:iSuperObject):string
, который вернул бы "путь" найденного значения.
В моем примере findpathinObject ("parent", "0003.1", newObject) вернул бы 'items [2] .items [0]'
Это хороший подход? Есть ли что-то, что решает мою проблему без создания новой функции?
ближе всего я видел это
SuperObject - Извлечь все
но я не знаю, можно ли это изменить, чтобы вернуть путь, по которому он ищет, или путь, по которому он наконец нашел значение ...
Спасибо