如何将字符串数据转换为json格式化数据

时间:2018-03-13 07:43:11

标签: javascript jquery json

我收到服务器的回复,格式如下:

[{"key":"Idle Time","values":[{"x":"SADSA","y":"4.0"},{"x":"FDDG","y":"6.0"},{"x":"FF","y":"4.15"}]},{"key":"Operational Time","values":[{"x":"SADSA","y":"20.0"},{"x":"FDDG","y":"18.0"},{"x":"FF","y":"19.45"}]}]

我需要将其转换为json格式,因此我使用了JSON.parse。这就是我得到的:

[{key:"Idle Time",values:[{x:"SADSA",y:"4.0"},{x:"FDDG",y:"6.0"},{x:"FF",y:"4.15"}]},{key:"Operational Time",values:[{x:"SADSA",y:"20.0"},{x:"FDDG",y:"18.0"},{x:"FF",y:"19.45"}]}]

但我想要以下格式:

[{key:"Idle Time",values:[{x:"SADSA",y:4.0},{x:"FDDG",y:6.0},{x:"FF",y:4.15}]},{key:"Operational Time",values:[{x:"SADSA",y:20.0},{x:"FDDG",y:18.0},{x:"FF",y:19.45}]}]

我怎样才能得到它?

3 个答案:

答案 0 :(得分:2)

您可以使用JSON.parsereviver函数,并将数值转换为数字。

  

使用reviver参数

     

如果指定了reviver,则在返回之前,通过解析计算的值是转换。具体而言,计算值及其所有属性(从最嵌套的属性开始并继续到原始值本身)分别通过reviver运行。然后调用它,包含属性的对象被处理为this,属性名称作为字符串,属性值作为参数。如果reviver函数返回undefined(或者不返回任何值,例如,如果执行从函数末尾开始),则从对象中删除该属性。否则,该属性将重新定义为返回值。

     

如果reviver仅转换某些值而不转换其他值,请确保按原样返回所有未转换的值,否则将从生成的对象中删除它们。

var json = '[{"key":"Idle Time","values":[{"x":"SADSA","y":"4.0"},{"x":"FDDG","y":"6.0"},{"x":"FF","y":"4.15"}]},{"key":"Operational Time","values":[{"x":"SADSA","y":"20.0"},{"x":"FDDG","y":"18.0"},{"x":"FF","y":"19.45"}]}]',
    data = JSON.parse(json, (key, value) => !isNaN(value) ? +value : value);
    
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:1)

function convertToNo(a){
    for (var i in a){
        if (!isNaN(a[i])) a[i] = parseFloat(a[i]);
        if (a[i].isArray()) return convertToNo(a[i]);
    }
}
var newObj = convertToNo(oldObj);

循环遍历数组并将所有字符串更改为数字。

答案 2 :(得分:1)

以下代码也适用于您:

var strJson = '[{"key":"Idle Time","values":[{"x":"SADSA","y":"4.0"},{"x":"FDDG","y":"6.0"},{"x":"FF","y":"4.15"}]},{"key":"Operational Time","values":[{"x":"SADSA","y":"20.0"},{"x":"FDDG","y":"18.0"},{"x":"FF","y":"19.45"}]}]';
var parsedJSON = JSON.parse(strJson); 
var res = [];
parsedJSON.forEach((obj) => {
  obj.values.forEach((innerObj) => {
    innerObj.y = parseFloat(innerObj.y);
  });
  res.push(obj);
});
console.log(res);