亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在C#中使用Json.net解析未知的Json文件

如何在C#中使用Json.net解析未知的Json文件

C#
楊__羊羊 2023-09-24 17:23:11
我可以使用獲取動態 Json 對象dynamic obj = JsonConvert.DeserializeObject(json);看起來是一個嵌套的對象結構我需要繪制 json 文件中的每個變量的圖表,但 json 文件結構經常發生變化有沒有辦法使用嵌套的 foreach() 語句來解析這個結構?如果沒有,我可以通過像字典一樣的字符串訪問每個元素來解析它嗎?例如:if(obj["Item1"]["Parameter3"]["Value2"]` != NULL)    int number = obj["Item1"]["Parameter3"]["Value2"]`謝謝,
查看完整描述

2 回答

?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

是的,有一個用于動態查詢的 API。

代碼看起來像這樣:

JObject rss = JObject.Parse(json);?

var postTitles =

? ? from p in rss["channel"]["item"]

? ? select (string)p["title"];


查看完整回答
反對 回復 2023-09-24
?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

終于搞清楚這個api了


一些 JToken 條目具有值列表,其他條目具有名稱和值。在解析之前,您必須先對哪個是哪個進行排序。


這將創建一個包含 Json 文件中每個條目的字典


    void SomeFunction()

    {

        Dictionary<string, decimal> json_data = new Dictionary<string, decimal>();

        dynamic json_obj = JsonConvert.DeserializeObject(json);

        Linearize(ref json_data, json_obj);

    }


    void Linearize(ref Dictionary<string, decimal> input_dict, JToken json_data, string key = "")

    {

        int i;

        if (json_data != null)

        {

            if (json_data.HasValues)

            {

                i = 0;

                foreach (dynamic entry in json_data)

                {

                    //Add a Name field if it exists

                    Type typeOfDynamic = entry.GetType();

                    if (typeOfDynamic.GetProperties().Where(p => p.Name.Equals("Name")).Any())

                        key += entry.Name + ".";


                    //If JToken is an Array

                    if (((JToken)entry).HasValues)

                    {

                        Linearize(ref input_dict, entry, key + "[" + i++ + "]" + ".");

                    }


                    //If JToken is a data type

                    else if (entry.Type == JTokenType.String || entry.Type == JTokenType.Float || entry.Type == JTokenType.Integer)

                    {

                        decimal output;

                        if (decimal.TryParse(entry.ToString(), out output))

                            input_dict.Add(key + "[" + i++ + "]", output);

                    }

                }

            }

        }           

    }


查看完整回答
反對 回復 2023-09-24
  • 2 回答
  • 0 關注
  • 296 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號