Удалить родительский элемент JSON в зависимости от дочернего значения - PullRequest
0 голосов
/ 29 мая 2020

У меня есть JSON с большим количеством пустого содержимого:

{
    "items": [
        {
            "category": "login",
            "fields": [
                {
                    "label": "Name",
                    "value": "",
                },
                {
                    "label": "E-Mail",
                    "value": "",
                },
                {
                    "label": "Password",
                    "value": "123456",
                },
                {
                    "label": "Website",
                    "fields": [
                        {
                            "label": "Name X",
                            "value": ""
                        },
                        {
                            "label": "Name Y",
                            "value": "another one"
                        },…
                    ]
                },…
            ]
        },…
    ]
}

Вложение идет на несколько уровней глубже. Это показывает только первый уровень. Я хочу удалить все элементы «полей» (или любой другой ключ массива на более глубоких уровнях), где их «значение» пусто.

{
    "items": [
        {
            "category": "login",
            "fields": [
                {
                    "label": "Password",
                    "value": "123456",
                },
                {
                    "label": "Website",
                    "fields": [
                        {
                            "label": "Name Y",
                            "value": "another one"
                        },…
                    ]
                },…
            ]
        },…
    ]
}

Как я могу сделать это в Javascript?

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Ну, я нашел способ перебрать объект JSON:

function remove(jsondata) {
  for (let i in jsondata) {
    if (jsondata[i].value != undefined && jsondata[i].value == '') {
       delete jsondata[i];
    }
    else if (typeof jsondata[i] === "object") remove(jsondata[i]);
  }
}

Не уверен, если это самый элегантный способ, но пока он работает.

0 голосов
/ 29 мая 2020

используйте метод filter, вы можете получить отфильтрованный массив
он вернул Boolean. если value существует, это будет правда

var list=JSON.parse(data)
list.items=list.items.map(val=>{
  val.fields=val.fields.filter(v=>v.value})
  return val
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...