将num或boolean类型的json对象从字符串类型转换为其原始对象

时间:2016-09-01 10:17:23

标签: javascript json node.js

在我的nodejs应用程序中,我有一个json对象,其中包含string,num和boolean类型的组合。但是boolean和num类型也表示为字符串。

Eg: `{"name":"sam","age":"24","isMarried":"false"}`

这里的age和isMarried是num和boolean类型,但表示为字符串类型。所以有任何方法,识别上面的json键值类型并将其转换为相应的变量type.i.e to

{"name":"sam","age":24,"isMarried":false}。`

任何帮助表示赞赏。谢谢!

2 个答案:

答案 0 :(得分:1)

  1. 您需要确保您的实际服务器返回正确的类型,因为JSON理解布尔值和整数。

  2. 你需要创建js函数来处理它。这在JS中并不容易,因为它没有tryParse。

  3. 以下是一个示例:https://jsfiddle.net/cr4qe1an/

    var str = '{"name":"sam","age":"24","isMarried":"false"}';
    var obj = JSON.parse(str);
    
    Object.keys(obj).forEach((x) => {
      if (obj[x] === 'false' || obj[x] === 'true') {
        obj[x] = obj[x] === 'true';
      }
    
      if (!isNaN(parseInt(obj[x], 10))) {
        obj[x] = parseInt(obj[x], 10); // This is bad, '1abc' will be 1
      }
    });
    

答案 1 :(得分:0)

我建议使用mapper来获取需要回调的键来转换项目。



var data = { "accounting": [{ "firstName": "John", "lastName": "Doe", "age": "23", married: "true" }], "sales": [{ "firstName": "Sally", "lastName": "Green", "age": "27", married: "false" }] },
    map = [
        { key: 'age', cb: Number }, 
        { key: 'married', cb: function (v) { return v === 'true'; } }
    ];

Object.keys(data).forEach(function (k) {
    data[k].forEach(function (a) {
        map.forEach(function (b) {
            if (b.key in a) {
                a[b.key] = b.cb(a[b.key]);
            }
        });
    });
});

console.log(data);

.as-console-wrapper { max-height: 100% !important; top: 0; }