如何无需迭代即可将所有json值转换为String

时间:2018-12-08 19:16:50

标签: javascript json

我有JSON,其中所有值都必须更改为字符串。这些值可以是数字,布尔值,未定义或null。

{
    "obj1": [{
        "n1": "n",
        "n2": 1,
        "n3": true
    },
    {
        "n1": "n",
        "n2": 1,
        "n3": null
    }]
}

预期结果是所有值都应格式化为string

示例:

{
    "obj1": [{
        "n1": "n",
        "n2": "1",
        "n3": "true"
    },
    {
        "n1": "n",
        "n2": "1",
        "n3": "null"
    }]
}

通过遍历JSON对象,我们可以做到这一点,但是有没有更简单的方法可以做到这一点。

3 个答案:

答案 0 :(得分:4)

您可以将JSON.stringify与替换函数一起使用,并检查这些值是否为数字,然后获取一个字符串值或仅该值。

var object = { obj1: [{ n1: "n", n2: 1, n3: true }, { n1: "n", n2: 1, n3: null }] },
    json = JSON.stringify(object, (k, v) => v && typeof v === 'object' ? v : '' + v);

console.log(json);
console.log(JSON.parse(json));

答案 1 :(得分:1)

您可以使用Json.stringify()方法

例如:

var object = { obj1: [{ n1: "n", n2: 1, n3: true }, { n1: "n", n2: 1, n3: null }] };

要查看结果,请使用Json.stringify()

console.log(JSON.stringify(object, (key, value) => value ? value.toString() : value));

答案 2 :(得分:0)

const obj = {
    "obj1": [{
        "n1": "n",
        "n2": 1,
        "n3": true
    }, {
        "n1": "n",
        "n2": 1,
        "n3": null
    }]
};
const text = JSON.stringify(obj)
const newObj = text.replace(/:([^"[{][0-9A-Za-z]*)([,\]\}]?)/g, ':\"$1\"$2')
console.log(newObj);
/*
{"obj1":[{"n1":"n","n2":"1","n3":"true"},{"n1":"n","n2":"1","n3":"null"}]}
*/

// Em, let's format it
console.log(JSON.stringify(JSON.parse(newObj), null, 2));
/*
{
  "obj1": [
    {
      "n1": "n",
      "n2": "1",
      "n3": "true"
    },
    {
      "n1": "n",
      "n2": "1",
      "n3": "null"
    }
  ]
}
*/