2017-06-29 47 views
1

解析JSON文件,這是我想要的JSON文件來分析有多個鍵和不同的價值觀C#

"success" : true, 
"message" : "", 
"result" : [{ 
     "MarketName" : "BTC-888", 
     "High" : 0.00000919, 
     "Low" : 0.00000820, 
     "Volume" : 74339.61396015, 
     "Last" : 0.00000820, 
     "BaseVolume" : 0.64966963, 
     "TimeStamp" : "2014-07-09T07:19:30.15", 
     "Bid" : 0.00000820, 
     "Ask" : 0.00000831, 
     "OpenBuyOrders" : 15, 
     "OpenSellOrders" : 15, 
     "PrevDay" : 0.00000821, 
     "Created" : "2014-03-20T06:00:00", 
     "DisplayMarketName" : null 
    }, { 
     "MarketName" : "BTC-A3C", 
     "High" : 0.00000072, 
     "Low" : 0.00000001, 
     "Volume" : 166340678.42280999, 
     "Last" : 0.00000005, 
     "BaseVolume" : 17.59720424, 
     "TimeStamp" : "2014-07-09T07:21:40.51", 
     "Bid" : 0.00000004, 
     "Ask" : 0.00000005, 
     "OpenBuyOrders" : 18, 
     "OpenSellOrders" : 18, 
     "PrevDay" : 0.00000002, 
     "Created" : "2014-05-30T07:57:49.637", 
     "DisplayMarketName" : null 
    } 
] 

如何可以解析它來獲得「音量」和任何marketname的「LastPrice」存在?有超過64個市場,那麼最好的辦法是什麼? 我也想舊卷和新卷之間進行比較..

+0

你有代表市場JSON一個C#對象? –

+3

可能的重複[解析JSON響應最簡單的方法](https://stackoverflow.com/questions/34043384/easiest-way-to-parse-json-response) – Ian

回答

2

你可以使用這個類:

public class Result 
{ 
    public string MarketName { get; set; } 
    public double High { get; set; } 
    public double Low { get; set; } 
    public double Volume { get; set; } 
    public double Last { get; set; } 
    public double BaseVolume { get; set; } 
    public string TimeStamp { get; set; } 
    public double Bid { get; set; } 
    public double Ask { get; set; } 
    public int OpenBuyOrders { get; set; } 
    public int OpenSellOrders { get; set; } 
    public double PrevDay { get; set; } 
    public string Created { get; set; } 
    public object DisplayMarketName { get; set; } 
} 

public class MyClass 
{ 
    public bool success { get; set; } 
    public string message { get; set; } 
    public List<Result> result { get; set; } 
} 

,然後你可以從結果列表中的「音量」和「最後」:

string YourJsonString = "....."; 

var myClass = new JavaScriptSerializer().Deserialize<MyClass>(YourJsonString); 

foreach(var result in myClass.Result){ 
    Console.WriteLine("Volume: " + result.Volume); 
    Console.WriteLine("Last: " + result.Last); 
} 

我沒有測試過這段代碼,但它應該可以工作。如果不發表評論。基於註釋


更新:

如果你想要一個市場與未來市場相​​比較,你可以使用一個for循環,而不是的foreach:

for(int i=0; i<myClass.result.Count;i++){ 
    if(myClass.Result[i].Volume > myClass.result[i+1].Volume) 
    { 
     Console.WriteLine("Volume "+i+": "+myClass.result[i].Volume+" is higher then volume "+(i+1)+": " + myClass.result[i+1].Volume); 
    } 

    if(myClass.result[i].Last > myClass.result[i+1].Last) 
    { 
     Console.WriteLine("Last "+i+": "+myClass.result[i].Last +" is higher then last "+(i+1)+": " + myClass.result[i+1].Last); 
    } 

} 

UPDATE2 :

另一種比較方法是:

聲明全局場:

private List<Result> _oldResult = new List<Result>(); 

之後,這樣做:

foreach(var result in myClass.Result){ 
    // do something with the list 

    // compare only, if oldResult is not empty 
    if(oldResult.Count == 0) continoue; 

    foreach(var oldResult in _oldResult){ 
     if(result.MarketName.Equals(oldResult.MarketName)){ 
     if(result.Volume > oldResult.Volume) 
     { 
      Console.WriteLine("Volume: " + result.Volume); 
      Console.WriteLine("Volume: " + oldResult .Volume); 
     } 

     break; 
     } 
    } 
} 

_oldResult = myClass.Result; 
+0

哦謝謝,但如果我想比較當前每個市場都存儲在「X」變量中的前一卷的交易量,你有關於如何去做的想法嗎? –

+0

聲明一個變量來保存foreach循環上的音量值,並在foreach循環的每次迭代中進行比較,並用空檢查跳過第一次迭代。 –

+0

我已經更新了我的答案。如果有幫助,請將我的答案標記爲已接受。 –

相關問題