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

分享給有同樣痛的程式小夥伴

如果有需要把dict轉成DataTable,可以參考這篇


留言