Удалить нулевые значения из json файла javascript

1

Я новичок в javascript, и я столкнулся с проблемой, мне нужно удалить все нулевые значения из json файла. Но я не смог его получить, я пробовал разные методы, которые я нашел на сайте, но они не работают для меня. Один из способов, который я нашел ниже. У меня просто проблема, как я уже говорил перед json файлом, я получаю ее с помощью JSON.stringify и с помощью кода, который удаляет null, я получаю это "{\" name\": \" Ann\", \" children\": [null, {\ "name \":\"Beta \",\"children \": [null, null, null]}, null]} ".

function Parent(name){
    this.name = name;
    this.children=new Array(null,null,null);
}

Parent.prototype.getName = function(){
return this.name;
};

Parent.prototype.setName = function(name) { 
 this.name=name; 
};

Parent.prototype.getChildren = function(){
 return this.children;
};

Parent.prototype.setChildren = function(parent) { 
 this.children=parent; 
};

var parent = create(aux,new Parent(""));// This method create tree parent
var o = parent;
j = JSON.stringify(o, (k, v) => Array.isArray(v) 
       && !(v = v.filter(e => e !== null && e !== void 0)).length ? void 0 : v, 2 )
     alert (j);

Файл Json:

{
  "name": "Ann",
  "children":
  [
    null,
    {
      "name": "Beta",
      "children":
      [
        null,
        null,
        null
      ]
    },
    null
  ]
}

Что я ожидаю:

{
  "name": "Ann",
  "children":
  [
    {
      "name": "Beta"
    }
  ]
}
  • 0
    Потому что я не думаю, что вы хотите удалить свойства объекта. Похоже, вам нужно вместо этого splice нулевые элементы массивов.
  • 0
    Вы уверены, что хотите изменить исходный объект? Я хотел бы рассмотреть возможность создания нового отфильтрованного объекта вместо обновления и удаления свойств из исходной ссылки
Показать ещё 10 комментариев
Теги:

1 ответ

2
Лучший ответ

JSON.parse и JSON.stringify принимают функцию JSON.stringify для изменения значений:

j = '{ "name": "Ann", "children": [ null, { "name": "Beta", "children": [ null, null, null ] }, null ] }'

o = JSON.parse(j, (k, v) => Array.isArray(v) ? v.filter(e => e !== null) : v )

console.log( o )

o = { "name": "Ann", "children": [ null, { "name": "Beta", "children": [ null, null, null ] }, null ] }

j = JSON.stringify(o, (k, v) => Array.isArray(v) ? v.filter(e => e !== null) : v, 2 )

console.log( j )

Чтобы удалить пустой массив:

o = { "name": "Ann", "children": [ null, { "name": "Beta", "children": [ null, null, null ] }, null ] }

j = JSON.stringify(o, (k, v) => Array.isArray(v) 
                                && !(v = v.filter(e => e)).length ? void 0 : v, 2 )

console.log( j )
  • 0
    Ваше решение просто фантастическое. У меня просто проблема, как я уже говорил перед файлом json, я получаю его с помощью JSON.stringify и с помощью кода, который также удаляет пустой массив: я получаю это "{\" name \ ": \" Ann \ ", \" children \ ": [null, {\" name \ ": \" Beta \ ", \" children \ ": [null, null, null]}, null]}". Что я делаю неправильно?
  • 0
    @pete возможно значения не null , но undefined или отсутствующие. Попробуй обновление.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню