Javascript — JSON: построение иерархического дерева

#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 # для вас.

http://json2csharp.com/

в зависимости от ваших результирующих данных 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. Это может сбить с толку других зрителей. спасибо