2017-08-11 152 views
0

我有以下JSON字符串,並不像我想的那樣直截了當。我希望得到一些幫助。我需要對每個條目進行迭代,並將它與另一組也在JSON字符串中的值進行比較(這對我來說結構要簡單得多)。我正在尋找一種建議模式,將數據取出並用於比較,然後如果是我想要的結果 - 將其打印出來。閱讀從Python中的JSON字符串解析的嵌套對象

的JSON:

{"success":true, 
"message":"", 
"result": 
    {"buy": 
      [ 
      {"Quantity":2.40078779,"Rate":1.11811290}, 
      {"Quantity":0.00085042,"Rate":1.11584924} .... 

等。有很多值。我在數據獲取的方式是這樣的:

print ("Buy: ",b1['result']['buy'][0]['Quantity'], ",",b1['result']['buy'][0]['Rate']) 

這中間的[0]這讓我 - 我想我可以通過我得到的條目數,然後循環= 0〜範圍(條目數),但它真的拋出我的邏輯斷爲其他JSON字符串與我比較條目結構要容易得多:容易(對我來說)JSON進入

例如:

{ 
    "eth_btc":{ 
     "asks":[ 
      [105,1], 
      [105.5,15], 
      [104.504,0.425], 
      [105.505,0.1] 
     ], 
     "bids":[ 
      [109,6], 
      [113.082,0.46540304], 
      [104.91,0.99007913], 
      [106.83,0.07832332] 
     ] 
    } 
} 


for asks in easyJson['eth_btc']['asks']: 
    print (asks) 

我需要比較這個問題的價值是很容易迭代對速度價值在abov e字符串。由於結構不同(我正在學習Python作爲一種業餘愛好),因此我無法圍繞以不同方式構造這些數據集的迭代的最佳方式。數據集將是LARGE,比較生活在5組數據中的4000個左右的數據,一個一個,根據我的標準找到合適的數據集。

我應該將所有數據從JSON標準化爲其他東西,然後在那裏做我的比較?與成千上萬個值相比,這是一種5種方法。

僞 - 代碼:

If ask1 < bid2 then if volume of ask1 is <= volume of bid2 then do something 
    etc - then ask1 vs bid3, and so on.. 
     ask2 vs bid1, ask2 vs bid3 ... 
      ask3 vs bid1, ask3 vs bid2, ask3 vs bid4 ... 

道歉,如果這是不明確。我正在努力解決這個項目問題,我覺得我很勉強強迫它,而不是使用Python的力量,我想學習!

感謝您的任何幫助 - 方向 - 任何東西!

+0

'import json; json.loads(json_string)'這會立即將它放入'dict' /'list'結構中。此外,我認爲如果您正在尋求對JSON文件進行某種市場微觀結構分析,那麼這種方式實在太糟糕了(我是一個定量分析)。當你的python代碼評估結果將是無用的 –

+1

其次作爲更多的SO問題呈現問題 - 你有一個非常棘手的問題,這種混亂和最終無處可去。一次嘗試並將您的問題固定在一件事上。例如1)你想分析JSON? 2)你想知道如何比較字典中的值嗎? - 這兩個問題都在SO上進行了深入報道。由於這些原因,我投票結束,因爲它太寬了 –

+0

由於您已經可以通過索引訪問數據,因此您現在擁有的是「詞典」或「列表」。你不需要把它轉換成其他的東西。 –

回答

0

我已經整理出了問題的第一部分 - 如何在數據得到我所感興趣的是:

import json 
b="""{"success":true,"message":"","result":{"buy":[{"Quantity":6.67178734,"Rate":0.01390041},{"Quantity":244.11602480,"Rate":0.01386500},{"Quantity":34.17058305,"Rate":0.01385014},{"Quantity":48.76276808,"Rate":0.01383242},{"Quantity":2.00000000,"Rate":0.01383239},{"Quantity":0.07212509,"Rate":0.01383000},{"Quantity":256.05669876,"Rate":0.01381066},{"Quantity":75.00000000,"Rate":0.01381065},{"Quantity":0.12796429,"Rate":0.01381050},{"Quantity":11.51657190,"Rate":0.01381048},{"Quantity":0.07895698,"Rate":0.01381047},{"Quantity":1.00000000,"Rate":0.01380653},{"Quantity":1.07501432,"Rate":0.01380650},{"Quantity":22.18832778,"Rate":0.01380474}]}} 
""" 
b1 = json.loads(b) 
buy = list(b1['result']['buy']) 
for item in buy: 
    print ("Rate: ",item['Rate'], "Quantity: ",item['Quantity']) 

我需要創建一個列表,我需要的數據 - 否則我想不出瞭解如何幹淨地遍歷它。如果有更好的方法,請告知。我寧願不把DICT對象並將其轉換爲列表,但否則這種數據格式化的方式,我無法弄清楚如何幹淨地遍歷它。