C# - json轉字典 - 取得字典中的陣列再轉字典/解析字典內容 / json to dict
C# - json轉字典/取得字典中的陣列再轉字典/解析字典內容/ json to dict
由於C#不能像python一樣
即使json轉成dict之後內含list
也可以直接使用for迴圈遍歷一層一層
或是直接透過dict[key][index]這種語法取得list的內容
為了取得子資料轉成DataTable
想了解法
假設json取得資料如下
{
"code":"0","message":"Success","ans":
[
{"code":"1","Test":
[
{"Num":"107","Age":"50","Fit":"C"},{"Num":"107","Age":"40","Fit":"C"}
]
},{"code":"12","Test2":
[
{"Num":"108","Age":"60","Fit":"CH"}
]
}
]
}
就是dict->list->dict->list->dict
網路上找不到甚麼優良漂亮的解法
所以我就真的不管,照著這個邏輯寫下去了XD
根據上一篇透過webapi接收json的最後一行
Dictionary<string, object> dicJson = JsonToDictionary(responseStr);
//將整個json轉成字典型態存成dicJson
//responseStr是接收到的json
所以我現在有dicJson這個字典
這個字典中的["ans"]的值是個list
所以就這樣寫
ArrayList listData=new ArrayList();
try
{
listData = (ArrayList)dicJson["ans"];
}
catch
{
}
丟個try catch 是防json沒有資料
那現在listData 中的第一項資料就是dict
{"code":"1","Test":
[
{"Num":"107","Age":"50","Fit":"C"},{"Num":"107","Age":"40","Fit":"C"}
]
}
所以寫成
Dictionary<string, object> dicSubData = (Dictionary<string, object>)listData[0];
(如果每一項都要跑的話就for (listData.Count)就好)
dicSubData ["Test"]的內容就是
[
{"Num":"107","Age":"50","Fit":"C"},{"Num":"107","Age":"40","Fit":"C"}
]
對又是一個list...所以再來
ArrayList listPOItem = (ArrayList)dicSubData["Test"];
終於剝皮到最後面了
listPOItem[0]就是
{"Num":"107","Age":"50","Fit":"C"}
所以再轉成dict
Dictionary<string, object> dicSubPOItem = (Dictionary<string, object>)listPOItem[0];
就可以取得這層裡面的資料了~耶~
當然基本上都是用迴圈去跑,不會真的這樣指定index
分享給有同樣痛的程式小夥伴
留言
張貼留言