我从服务器收到以下格式的响应:
[{"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}]}]
我怎样才能得到它?
您可以使用
reviver
的
JSON.parse
函数并将数值转换为数字。
使用reviver参数
如果指定了
,则通过解析计算出的值在返回之前会进行transformed。具体来说,计算值及其所有属性(从最嵌套的属性开始,一直到原始值本身)都单独通过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; }
以下代码也可以为您工作:
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);
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);
这会循环遍历数组并将所有字符串更改为数字。
要将 JSON 字符串转换为 JavaScript 对象,可以使用 JSON.parse() 方法:
const jsonString = '{"key":"value"}';
const jsonObject = JSON.parse(jsonString);
If your JSON string contains numeric values as strings and you want them as numbers, you can use a reviver function with JSON.parse():
const jsonString = '{"numberAsString": "123"}';
const jsonObject = JSON.parse(jsonString, (key, value) =>
typeof value === 'string' && !isNaN(value) ? Number(value) : value
);
此方法可确保数字字符串转换为实际数字。
要验证和格式化 JSON 数据,请考虑使用 https://toolsfor human.com/tools/coding/json/json-formatter.html 上的 JSON 格式化程序和验证器。该工具有助于识别错误并美化 JSON 以提高可读性。