#javascript #json
#javascript #json
Вопрос:
Я пытаюсь отобразить дерево, используя dhtmlxtreegrid
Мне нужна помощь в создании данных иерархического дерева из сглаженного JSON.
Мои данные в формате JSON выглядят следующим образом:
{
"rows": [
{
"id": "01", // child id
"parentid": "00", // parent Id
"data": [
"101831",
"Work",
"Desc-4-1"
]
},
{
"id": "02",
"parentid": "01",
"data": [
"101832",
"No Work",
"Desc-4-0"
]
},
{
"id": "03",
"parentid": "01",
"data": [
"101835",
"Work",
"Desc-5-0"
]
},
{
"id": "04",
"parentid": "03",
"data": [
"101835",
"Work",
"Desc-5-1"
]
}
]
}
Результирующий JSON должен иметь иерархическую древовидную структуру:
{
"rows": [
{
"id": "01",
"parentid": "00",
"data": [
"101831",
"Work",
"Desc-4-1"
],
"rows": [
{
"id": "02",
"parentid": "01",
"data": [
"101832",
"No Work",
"Desc-4-0"
]
},
{
"id": "0",
"parentid": "01",
"data": [
"101835",
"Work",
"Desc-5-0"
]
}
]
}
]
}
Комментарии:
1. вы уверены, что ваши данные JSON верны?
2. Yes..it это правильный формат
3. И что вы уже пробовали?
4. извините, но я все еще не уверен, у нас может быть объект, который имеет только значение, без ключа. Ваш JSON выглядит примерно так.
5. у нас есть «строки» в качестве ключа .. верно?
Ответ №1:
если вам нужно решение на c #, вот ссылка, по которой генерируется код на c # для вас.
в зависимости от ваших результирующих данных JSON вот код c # :
public class Row2
{
public string id { get; set; }
public string parentid { get; set; }
public List<string> data { get; set; }
}
public class Row
{
public string id { get; set; }
public string parentid { get; set; }
public List<string> data { get; set; }
public List<Row2> rows { get; set; }
}
public class RootObject
{
public List<Row> rows { get; set; }
}
Ответ №2:
Я перепробовал несколько способов, и у меня получилось, если я правильно понял вашу проблему.
Ваши данные в формате JSON:-
var data = {
"rows": [
{
"id": "01", // child id
"parentid": "00", // parent Id
"data": [
"101831",
"Work",
"Desc-4-1"
]
},
{
"id": "02",
"parentid": "01",
"data": [
"101832",
"No Work",
"Desc-4-0"
]
},
{
"id": "03",
"parentid": "01",
"data": [
"101835",
"Work",
"Desc-5-0"
]
}
]
}
Функции для изменения структуры.
var addRowsToLastChild = function(obj1,rowsToAppend){
//if that object has rows key check in that row otherwise add rows to the object
if(obj1["rows"]){
addRowsToLastChild(obj1["rows"][0],rowsToAppend);
return;
}
obj1["rows"] = [];
obj1["rows"][0] = rowsToAppend;
obj1;
}
var resultJSON = data.rows.reduce(function(obj1,obj2){
addRowsToLastChild(obj1,obj2);
// object are passed by refference so any changes in obj1 will be affected
return obj1;
},{});
Результатом будет:-
{
"rows": [
{
"id": "01",
"parentid": "00",
"data": [
"101831",
"Work",
"Desc-4-1"
],
"rows": [
{
"id": "02",
"parentid": "01",
"data": [
"101832",
"No Work",
"Desc-4-0"
],
"rows": [{
"id": "03",
"parentid": "01",
"data": [
"101835",
"Work",
"Desc-5-0"
]
}
]
}
]
}
]
};
Комментарии:
1. Большое спасибо, Мританджей… Не могли бы вы, пожалуйста, поделиться исполняемым кодом? Похоже, что отсутствует какой-то код…
2. можете ли вы сказать мне, что за ошибку / проблему вы получали?
3. У меня был только этот код и я добавил ваши данные JSON в переменную
data
, теперь я добавил и это.4. @Nambi вам следует обновить свой вопрос, часть result JSON. Это может сбить с толку других зрителей. спасибо