toString all the object datas

I have an object (json) like this in node.js:

var data = {
    string : "name",
    number : 123456789 ,
    n : null ,
    bool : false ,
    bool2 : true
};

But I need to conver it to something like this:

{
    string : "name",
    number : "123456789" ,
    n : "null" ,
    bool : "false" ,
    bool2 : "true"
};

I used this codes but not works.

for ( var index in data ){
    data[index] = data[index].toString();
};
// or this
data.toString();

How can I fix it?

UPDATE

this data object is created as a new mongoose schema.

Your code looks fine, except for one thing: null doesn't have .toString() method. So, it's best to use String instead:

for ( var key in data ){
   data[key] = String(data[key]);
};

String is a string constructor. It takes anything and produces a string representation of it.

Update

But this solution won't work for complex data structures. Though, if you need a JSON string, then you could use JSON.stringify with tricky replacer:

function replaceWithString(k, v) {
  if ((typeof v === 'object') && (v !== null)) {
    return v;
  } else {
    return String(v);
  }
}
JSON.stringify(data, replaceWithString);

and if you want to make it pretty:

JSON.stringify(data, replaceWithString, 2);

N.B. As Bergi noticed in comments, you could use Object(v) === v instead of (typeof v === 'object') && (v !== null) to check that v is an object.

Update2

It looks like data in your example is a mongoose document.

The problem with mongoose is that it wraps all its object with the whole pack of nasty getters and setters to make them look like plain JS objects, which they are not.

So, if you're working with mongoose documents, you should call .toObject() or .toJSON() before trying to do anything with it:

data = doc.toObject(); // converts doc to plain JS object

Though, my second solution with JSON.stringify should work anyway, because stringify calls .toJSON() automatically.

for (var index in data) {
  if (data[index] === null) {
    data[index] = "null";
  }
  else if (data[index] === undefined) {
    data[index] = "undefined";
  }
  else {
    data[index] = data[index].toString();
  }
}

Try this:

var val = null;
for(var key in data){
    if(data.hasOwnProperty(key)){
        val = data[key];
        val = val === null ? 'null' : (val === undefined ? 'undefined' : val.toString());
        data[key] = val;
    }
}

It simply converts null to "null" and undefined to "undefined" Note that values of your object must be a primitive data type for this to work. btw, this will work fine for your example.

A simple

JSON.stringify(data);

should work.

when doing

data[index].toString();

you are referencing a null on the third run. null has no such method toString().

Just thought I'd answer with a code that's a bit different:

for(var x in data){
    data[x] = ""+data[x]+"";
}

Works.