2

I am new to javascript and I have encountered a problem I need to remove all null values from a json file. But I have not been able to get it I have tried different methods that I found on the site but they do not work for me. One of the ways I found below. I just have a problem as I said before the json file I get it with JSON.stringify and by using the code that removes null I get this "{\" 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 file:

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

What I expect:

{
  "name": "Ann",
  "children":
  [
    {
      "name": "Beta"
    }
  ]
}
12
  • Because I don't think you want to delete object properties. It looks like you need to splice out null elements of arrays instead. Commented Dec 2, 2017 at 22:25
  • Are you sure you want to modify the original object? I'd consider creating a new filtered object instead of updating and deleting properties from the original reference Commented Dec 2, 2017 at 22:30
  • @MatiasCicero Relax, it's from a JSON file, so once it is parsed, it's already a copy. Commented Dec 2, 2017 at 22:33
  • do you get the object from JSON.parse ? Commented Dec 2, 2017 at 22:34
  • 1
    @blex From the point of view of the method, this can be any object. I'm just saying so the caller of the method does not get any unexpected behavior. Immutability over mutability, if possible. Commented Dec 2, 2017 at 22:36

1 Answer 1

7

JSON.parse and JSON.stringify accept replacer function to modify the values:

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 )

To remove the empty array too:

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 )

Sign up to request clarification or add additional context in comments.

4 Comments

Your solution is fantastic I just have a problem as I said before the json file I get it with JSON.stringify and by using the code that removes the empty array too: I get this "{\" name \ ": \" Ann \ " , \ "children \": [null, {\ "name \": \ "Beta \", \ "children \": [null, null, null]}, null]} ". What am I doing wrong?
@pete maybe the values are not null, but undefined or missing. Try the update.
Keep going the same thing is very strange. With the json burned it works. But getting it with JSON.stringify does not work. JavaScript only seeks to annoy me.
@pete if the updated version doesn't work either, can you update your question with the code that reproduces the issue, or make a separate question with a MVCE

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.