[开发] 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