2017-12-10 1 views
2

JSON応答からintに、すべての文字列値を変換し、この初心者の質問には申し訳ありません

私は応答としてこれを取得しています:

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

は、今私はrank: 1, price_usd: 15487.0

rank: "1", price_usd: "15487.0"を変換したいです

テーブルが英数字の代わりにソートされるので、私はこれが必要です。

どうすればいいですか?

+0

まだあなたが変換しても、辞書順になりますネイティブのソート順文字列を数値に変換します。数値ソートを検索します。 – Teemu

+1

問題は次にソート機能です。 – charlietfl

答えて

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です。

+0

がまだ "" 0 "の文字列のままである場合にカスタマイズする必要があります。 – charlietfl

+0

@charlietflわかりません。 'if(+" 0 ")'が偽であるためhttps://jsfiddle.net/wwu5dm8u/ –

+0

https://jsfiddle.net/e2qms405/ – charlietfl

0

データベースとしてmysqlを使用している場合は、テーブルrankのカラムをintとして、price_usdをdecimalとすると、ソートが正しく機能します。

データクライアント側を変換する場合は、あなたは、変換したりするために使用することができ、この

for(var k in data) { 
if(k == 'price_usd') { 
data[k] = parseFloat(data[k]); 
    } 
// for rank also 
} 
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)

関連する問題