2017-12-02 476 views
1

我有以下用於存儲所有數據的JSON對象。如何從MVC中的JSON對象中獲取數據

[{"id":1,"CoinValue":"0.01","Count":82,"CoinWeight":76}, 
{"id":2,"CoinValue":"0.02","Count":86,"CoinWeight":18}, 
{"id":3,"CoinValue":"0.05","Count":29,"CoinWeight":42}, 
{"id":4,"CoinValue":"0.1","Count":35,"CoinWeight":90}, 
{"id":5,"CoinValue":"0.2","Count":23,"CoinWeight":3}, 
{"id":30,"CoinValue":"0.5","Count":41,"CoinWeight":36}] 

我想獲取每個記錄的CoinValue和Count以便在谷歌圖表中顯示。目前,我有一個視圖調用Coin控制器中的一個名爲Data的方法來接收數據,但是我無法實現這個功能。

CoinController:

public ActionResult Data() 
    { 
     //Read Json object 
     var fileContents = System.IO.File.ReadAllText(@"H:\EasyAsPiMVC\EasyAsPiMVC\App_Data\MOCK_DATA.json"); 

     //not sure how to properly pass this data to the view 

     return Json(fileContents); 
    } 

的Javascript鑑於處理和顯示數據

<script type="text/javascript"> 
$(document).ready(function() { 
    $.ajax({ 
     type: 'POST', 
     dataType: "Json", 
     contentType: "application/json", 
     url: '@Url.Action("Data", "Coin")', 
     success: function (result) { 
      google.charts.load('current', { 
       'packages': ['corechart'] 
      }); 
      google.charts.setOnLoadCallback(function() { 
       drawChart(result); 
      }); 
     } 
    }); 

    function drawChart(result) { 
     var data = new google.visualization.DataTable(); 
     data.addColumn("string", "CoinValue"); //might have to be changed 
     data.addColumn("number", "Count"); 
     var dataArray = []; 
     $.each(result, function (i, obj) { 
      dataArray.push([obj.CoinValue, obj.Count]); 
     }); 
     data.addRows(dataArray); 

     var piechart_options = { 
      title: 'Coin Tracker Piechart', 
      width: 400, 
      height: 300 
     }; 

     var piechart = new google.visualization.PieChart(document.getElementById('piechart_div')); 
     piechart.draw(data, piechart_options); 

     var barchart_options = { 
      title: 'Coin Tracker barchart', 
      width: 400, 
      height: 300, 
      legend: 'none' 
     }; 

     var barchart = new google.visualization.BarChart(document.getElementById('barchart_div')); 
     barchart.draw(data, barchart_options); 
    } 
}); 
</script> 

我是一個編程小白和一直沒能到現在過了一天算出來的。我做了大量的研究,但我似乎無法得到這個工作。

+0

採用了棱角分明會幫助你從長遠來看,沒有一個答案,但更多的是建議的去做。 – BARNOWL

+0

什麼不適合你?你有什麼錯誤嗎? –

回答

1

ReadAllText方法爲您提供string,這是該文件的內容。您需要將其反序列化爲​​對象列表。您的客戶端代碼需要一個對象數組,每個對象都有一個CoinValueCount屬性。所以你需要返回這個json數組。

這裏是你將如何與JSON.NET

[HttpPost] 
public ActionResult Data() 
{ 
    var path = "Path to your JSON file goes here"; 
    var fileContents = System.IO.File.ReadAllText(path); 
    var list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Coin>>(fileContents); 
    return Json(list); 
} 
+0

比你,我正在嘗試一些非常類似於此前的東西,但使用了一個不同的模型類,只是舉行了一個沒有工作的硬幣對象列表。非常感謝! – Kalvinl8