[開發] OpenDate之Json解析及讀取教學

作者: Severine (賽非茵)   2014-05-30 17:11:09
又來洗文章了~~~ (/‵Д′)/~ ╧╧
沒有啦 看著H大的Json教學讓我也想來寫一篇「懶人包」,原本想附在上篇文章的下面,
又怕混在一起會讓人不好搜尋就乾脆動筆寫一篇小教學,也算是自己的筆記
工具 : H大的JSON文章內有講到物件與陣列的關係,但是看到密密麻麻的JSON檔,
誰還看得下去呀! 還好前陣子我同學友情推薦了兩個實用的網站可以幫助我來
分析和宣告.
分析: http://www.jsoneditoronline.org/
只要把又臭又長的JSON字串丟進去就會幫你乖乖排好,瞬間看懂哪些是陣列
、哪些是字串,再也不用煩惱囉!
ex: {"help":"","success": true, "result":["resource_id","hello"]}
網站分析 object{3} <-三物件
├ help : ""
├ success : true
└ result [2] <- 兩陣列
├ resource_id
└ hello
宣告: http://json2csharp.com/
只要把url或是你的JSON string丟入,就會幫你立馬宣告所需的 class
ex: 丟入 http://ppt.cc/SVOZ 會產生
public class RootObject
{
public string SiteId { get; set; }
public string SiteName { get; set; }
public string County { get; set; }
....
}
程式碼 : 有了工具以後,該怎麼讀取JSON裡面的資料呢? 取得物件的部分有點麻煩,
我最怕麻煩,所以我就不示範了..... ﹨(╯▽╰)∕
喂~~這樣好像不太對?
只好勉強簡單寫個取得陣列資料的方法~也就是剛剛做的東西剪下貼上的..
大學生都會這一招 (被毆
目標:我想取得氣象局的雨量資料,但是為了示(ㄊㄡ)範(ㄌㄢˇ)所以精簡到
只取得監測站的名稱資料.
http://ppt.cc/Uo9T
UI: 1.先拉個button到XAML
2.再拉個TextBlock,命名 x:name=output
3.在button點兩下,帶入程式碼部分
Code:
public class RootObject //從分析網站取得
{
public string SiteId { get; set; }
public string SiteName { get; set; }
public string County { get; set; }
}
private async void Start_Click(object sender, RoutedEventArgs e)
{
string jsonStr = "http://ppt.cc/Uo9T" //可帶入你要的url
//取得JSON字串
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(jsonStr);
response.EnsureSuccessStatusCode();
string responseUri = await response.Content.ReadAsStringAsync();
//取得的JSON是陣列就可以直接讀入JArray
JArray dataArray = JArray.Parse(responseUri);
//宣告暫存字串
string temp = "";
//巡覽dataArray內的所有物件
foreach (JObject obj_results in dataArray)
{
//取得SiteName
temp += obj_results["SiteName"].ToString();
}
//輸出到XAML
output.Text = temp;
}
//這樣就完成囉,有夠懶惰的一點都不想多打字!
作者: superwave (Superwave)   2014-05-30 17:51:00
哦哦哦哦這生class的工具超好用的啊每次手動打這些都覺得好浪費時間..
作者: felaray (傲嬌魚)   2014-05-30 17:54:00
我以前也耍蠢用手刻..累死了..還很容易搞錯..
作者: hungys (hungys)   2014-05-30 18:42:00
我都從VS2013直接貼耶... 還以為是內建的,還是因為我有裝WebEssentials plugin!?Edit>Paste Special>Paste JSON As Classes我用很久了,只是忘記是不是內建的xD 不然就是裝WebEssentials 超方便~
作者: qoo456alex   2014-05-30 20:09:00
Shared project 可以想成是一般的 程式庫專案只是裡面多了可以增加view的功能,我通常只寫class這樣就可以達到MVVM的美妙之處了
作者: hungys (hungys)   2014-05-30 20:20:00
推MVVM+1, 雖然我應該不是100%的MVVM...XD
作者: songla1204 (TTP)   2014-05-30 22:33:00
作者: Severine (賽非茵)   2014-05-31 21:01:00
美妙..嗎? 還沒領略到那種意境 現在是被荼毒中>.<

Links booklink

Contact Us: admin [ a t ] ucptt.com