[VB.NET]接收Json格式資料,並轉為物件或資料表

摘要:[VB.NET]接收Json格式資料,並轉為物件或資料表

首先使用 VB2012 先將Json轉成 .NET類別
保哥的教學 http://www.youtube.com/watch?v=zwTbyn5VZh8

引用


Imports Newtonsoft.Json

Imports Newtonsoft.Json.Linq

'宣告WebClient用來取得Json(註":該物件也可用來下鮺網頁原始碼)


Dim objWebClient As New System.Net.WebClient

本範例使用臺北創意街區
主要欄位說明:區域、店名、地址、電話、營業時間、網址
 


Dim Url As String = "http://data.taipei.gov.tw/opendata/apply/json/RkZBQjUyMTktM0E0NC00RkI2LUFFNTUtMkJBMTJEMEFGRDUy"

使用UTF-8編碼取得Json內容
 


Dim JsonStr As String = ""
JsonStr = Encoding.UTF8.GetString(objWebClient.DownloadData(New Uri(Url.Trim())))

※ Json說明:
1. JSON 字串可以包含陣列 Array 資料或者是物件 Object 資料
2. 陣列 [ ] ,例:[{"Name":"Liuder"},{"Name":"yukuto"},{"Name":"INN"},{"Name":"QQ"}]
3. 物件 { } ,例:{"Name":"Liuder","address":"taipei","phone":"0912345678"}
4. 物件+陣列 {"response":[{"Name":"Liuder"},{"Name":"yukuto"},{"Name":"INN"},{"Name":"QQ"}]}

範例一、已知本範例內容為陣列型態,所以可以直接轉換成List或DataTable


Dim DataList As New List(Of TaipeiArtStreet) '根據之前先轉換好的類別宣告List
DataList = JsonConvert.DeserializeObject(Of List(Of TaipeiArtStreet))(JsonStr)

Dim Table1 As New DataTable '轉換成Datatable
Table1 = JsonConvert.DeserializeObject(Of DataTable)(JsonStr)

'----------------------------------------分隔線-------------------------------------------

'範例二、如果已知JsonStr為單一物件,可用下列範例


JsonStr = "{""orderdata"":{""orderid"":""20130101002"",""itemCount"":""3"",""Pricetotal"":""600"",""detail"":[{""ISBN"":""957000001"",""Name"":""book1"",""price"":""100""},{""ISBN"":""957100002"",""Name"":""book2"",""price"":""200""},{""ISBN"":""957100003"",""Name"":""book3"",""price"":""300""}]}"

Dim Obj As Newtonsoft.Json.Linq.JObject = Newtonsoft.Json.JsonConvert.DeserializeObject(JsonStr)
'取得物件明細的方法 依據階層 Obj.item("階層1")("階層2") 以此類推
Dim OrderId As String = Obj.Item("orderdata")("orderid").ToString
Dim itemCount As String = Obj.Item("orderdata")("itemCount").ToString
Dim Pricetotal As Int32 = Obj.Item("orderdata")("Pricetotal").ToString
Dim Dt As New DataTable
'將訂單明細轉成DataTable
Dt = JsonConvert.DeserializeObject(Of DataTable)(Obj.Item("orderdata")("detail").ToString)

'--------以上不知各位看官了解了沒,如果有問題歡迎留言來一起討論