2017-09-27 31 views
0

我目前被困在如何將JSON文件的輸出從具有科學記數法變爲具有JSON字典中某些鍵的浮點數。修復json中的科學記數法浮動

例如我需要這樣的:

{ '消息': '', '結果':[{'向':8.982e-05, 'BaseVolume':235.09663206 , 'Bid':8.9e-05, 'Created':'2017-06-06T01:22:35.727', 'High':9.413e-05, 'Last':8.878e-05, '低':8.01e-05, 'MarketName':'BTC-1ST', 'OpenBuyOrders':408, 'OpenSellOrders':6009, 'PrevDay':8.375e-05, '時間戳': '2017-09-27T02:17:44.677', '音量':2678614.34426254},

看像這樣:

{「success」:true,「message」:「」,「result」:[{「MarketName」:「BTC-1ST」,「High」:0.00009413,「Low」:0.00008010 ,「Volume」:2678614.34426254,「Last」:0.00008878,「BaseVolume」:235.09663206,「TimeStamp」:「2017-09-27T02:13:07.55」,「Bid」:0.00008900,「Ask」:0.00008982 「OpenBuyOrders」:4 08, 「OpenSellOrders」:6009, 「PrevDay」:0.00008375, 「創建」: 「2017-06-06T01:22:35.727」},

我當前的代碼看起來就像這樣:

#!/usr/bin/python3 

import urllib.request, json 
from pprint import pprint 
from json import encoder 

encoder.FLOAT_REPR = lambda o: format(o, '.8f') 
with urllib.request.urlopen("https://bittrex.com/api/v1.1/public/getmarketsummaries") as url: 
    data = json.loads(url.read().decode()) 
    pprint (data) 

即使我以前的問題被標記爲回答並且存在另一個問題的重複問題,也不起作用。這個「重複」問題與科學記數法無關,並且不解決問題。

+2

您正在使用JSON。讀取文件和pprint以顯示在控制檯上你似乎關心數據是如何顯示的,這是pprint而不是json的屬性,你是否想要問如何改變浮點值的默認格式在pprint? –

回答

1

這些數值爲已經存儲爲浮點數!你可以用下面的代碼(從你的修改)看到這一點:

#!/usr/bin/python3 

import urllib.request, json 
from pprint import pprint 
from json import encoder 

encoder.FLOAT_REPR = lambda o: format(o, '.8f') 
with urllib.request.urlopen("https://bittrex.com/api/v1.1/public/getmarketsummaries") as url: 
    data = json.loads(url.read().decode()) 
    # pprint (data) 
    thing = list(filter(lambda x:x['MarketName']=='BTC-1ST', data['result']))[0] 
    pprint(thing['Ask']) 
    print('{:.10f}'.format(thing['Ask'])) 
    print(type(thing['Ask'])) 

通知從pprint的第一個值是如何顯示科學記數法(即浮點值的默認字符串表示),而第二個顯示它格式化類似於你迫使它以這種方式顯示的想法。因此,如果你只是想打印出其中的一個值,那麼你必須像我的例子那樣使用字符串格式,或者如果你想將這些值傳遞給另一個程序或函數,由於它們已經漂浮,所以不得不改變任何東西!

0

也許,它會導致一些問題,但它們很容易修復。 您需要使用的,而不是json.loads json.dumps()()

data = json.dumps(url.read().decode()) 

輸出:

「 「{\」 成功\ 「:真實的,\」 消息\「:\ 「\」 \ 「結果\」:[{\ 「MarketName \」:\ 「BTC-1ST \」,\ 「高\」:0.00009287,\ 「低\」:0.00008200,\ 「卷\」:1860886.81706592, \ 「最後的\」:0.00008800,\ 「BaseVolume \」:163。34599977,\ 「時間戳\」:\ 「2017-09-27T07:54:48.62 \」,\ 「投標\」:0.00008800,\ 「問\」:0.00008818,\ 「OpenBuyOrders \」 401 \「OpenSellOrders \ 「:6015,\」。 ...

因爲,你知道,你以前的問題被標記爲重複在方案規定的there,筆者使用的轉儲()方法