Ошибка при создании допустимой рекурсивной функции javascript в формате json

#javascript #arrays #json #recursion

#javascript #массивы #json #рекурсия

Вопрос:

У меня есть функция для генерации объекта, который я позже преобразую в JSON:

 function createSearchCriteria(payload) {
    var output = [];
    if (payload['searchCriteria'] != null) {
        for (var i = 0; i < payload['searchCriteria'].length; i  ) {
            var content = payload['searchCriteria'][i];
            output[i] = {};
            if (content['grouping'] != null) {
                output[i]['groupOperator'] = content['grouping'];
                output[i]['searchCriteria'] = [];
                output[i]['searchCriteria'].push(createSearchCriteria(content))
            } else {
                output[i]['name'] = content['name'];
                output[i]['type'] = content['type'];
            }
        }
    }
    return output
}
 

Входная полезная нагрузка для этого метода также представляет собой проанализированное значение JSON

 payload = JSON.parse(request);
 

Структура ввода почти такая же, как и на выходе, единственное отличие — атрибут «группировка», который на выходе называется «groupOperator».

Я реализовал свою функцию рекурсивно, потому что у нас могут быть разные уровни критериев поиска.

Несмотря на то, что SearchCriteria во входных данных имеет только один [] каждый.

входные данные

Почему каждый поисковый критерий в результате содержит 2 пары квадратных скобок?

 {
    "searchCriteria": [
        {
            "groupOperator": "AND",
            "searchCriteria": [
                [
                    {
                        "groupOperator": "OR",
                        "searchCriteria": [
                            [
                                {
                                    "name": "FirstName",
                                    "type": "string"
                                },
                                {
                                    "name": "LastName",
                                    "type": "string"
                                },
                                {
                                    "name": "MiddleName",
                                    "type": "string"
                                },
                                {
                                    "name": "Document",
                                    "type": "string"
                                },
                                {
                                    "name": "DOB",
                                    "type": "date"
                                },
                                {
                                    "name": "CdrId",
                                    "type": "string"
                                }
                            ]
                        ]
                    },
                    {
                        "groupOperator": "AND",
                        "searchCriteria": [
                            [
                                {
                                    "name": "Active",
                                    "type": "bool"
                                },
                                {
                                    "name": "Id",
                                    "type": "int"
                                },
                                {
                                    "name": "CountryId",
                                    "type": "int"
                                }
                            ]
                        ]
                    }
                ]
            ]
        }
    ],
    "groupOperator": "AND"
}
 

Заранее спасибо за вашу помощь.

Комментарии:

1. JSON совершенно не имеет отношения к этому вопросу, который касается реструктуризации объекта. Вы должны найти лучшие существующие решения, если вы не ищете специально для решения JSON.

2. Как бы вы хотели изменить вывод?

3. да, это не имеет значения, но результат должен быть действительным json, поэтому я и упомянул. @LajosArpad, полученный мной ответ содержит два набора квадратных скобок в критериях поиска, мне просто нужен был один

Ответ №1:

попробуйте

 output[i]['searchCriteria'] = createSearchCriteria(content)
 

вместо

 output[i]['searchCriteria'] = [];
output[i]['searchCriteria'].push(createSearchCriteria(content))
 

Комментарии:

1. Спасибо!! Javascript не моя сильная сторона, так что … я этого не вижу, он работает сейчас!!