将所有字符串值从JSON响应转换为int

时间:2017-12-10 17:44:07

标签: javascript json

对不起这个初学者问题:

我将此作为回复:

{id: "bitcoin", name: "Bitcoin", symbol: "BTC", rank: "1", price_usd: "15487.0"}

现在我想将rank: "1", price_usd: "15487.0"转换为rank: 1, price_usd: 15487.0

我需要这个的原因我因为我的表将字母数字排序而不是数字。

我该怎么做?

3 个答案:

答案 0 :(得分:4)

你可以用,

var obj = {id: "bitcoin", name: "Bitcoin", symbol: "BTC", rank: "1", price_usd: "15487.0"};

Object.keys(obj).forEach((itm) => {
 if(!Number.isNaN(+obj[itm])) obj[itm] = +obj[itm];
});

console.log(obj);

简单的数字转换正在这里发挥作用。如果使用+运算符将非数字字符串转换为数字,则会返回NaN。通过使用它,我们可以实现你想要的。

如果您想使用可靠的方式检查NaN,请使用以下方法,

var obj = {id: "bitcoin", name: "Bitcoin", symbol: "BTC", rank: "1", price_usd: "15487.0"};

Object.keys(obj).forEach((itm) => {
 let conv = +obj[itm];
 if(conv == conv) obj[itm] = +obj[itm];
});

console.log(obj);

这是一种可靠的方法。因为根据ECMA脚本,检查数字是否为NaN的可靠方法是检查数字是否等于自身。如果它不相等,则该数字为NaN

答案 1 :(得分:1)

JSON.parse reviver可用于转换或过滤值:



j = '{"id":"bitcoin","name":"Bitcoin","symbol":"BTC","rank":"1","price_usd":"15487.0"}'

o = JSON.parse(j, (k, v) => isNaN(+v) ? v : +v)

console.log(o)




答案 2 :(得分:0)

如果您使用mysql作为数据库,则可以将表rank中的列设置为int,将price_usd设置为decimal,然后排序将正常工作。

如果您想转换数据客户端。那么你可以这样做

for(var k in data) {
if(k == 'price_usd') {
 data[k] = parseFloat(data[k]);
  }
// for rank also
 }