簡體   English   中英

在不知道結構的情況下使用 Newtonsoft.Json 解析 JSON

[英]Parsing JSON Using Newtonsoft.Json Without Knowing the Structure

我正在開展一個項目,該項目涉及使用 Swagger 定義自動執行 API 調用。 我下載了 swagger.json 文件。 我需要解析的JSON Object的結構不一致。 解析路徑時,有一個對象列表,然后在其中它們具有可用於該特定路徑的方法。 我可以使用各種字符串方法僅檢索路徑,但我的問題是,如果 JSON 的結構沒有固定密鑰,是否有解析 json 的好方法? 這是我的意思的一個例子:

{"/user": {
    "post": {
      "tags": [
        "user"
      ],
      "summary": "Create user",
      "description": "This can only be done by the logged in user.",
      "operationId": "createUser",
      "consumes": [
        "application/json"
      ],
      "produces": [
        "application/json",
        "application/xml"
      ],
      "parameters": [
        {
          "in": "body",
          "name": "body",
          "description": "Created user object",
          "required": true,
          "schema": {
            "$ref": "#/definitions/User"
          }
        }
      ],
      "responses": {
        "default": {
          "description": "successful operation"
        }
      }
    }
  }

如果我只想解析該路徑並檢索方法 object 我怎么能 go 考慮到有時 object 將是“發布”,或者有時它將是“允許”的路徑,“ .

            JObject jsonResp = swaggerDownload();
            JObject paths = (JObject)jsonResp["paths"];
            foreach (var i in paths)
            {
                string pathToString = i.ToString();
                var shaveSomethings = pathToString.Substring(1, something.Length - 2);
                var pathAndJson = shaveSomethings.Split(new[] { ',' }, 2);
                string correctJsonStructure = "{\"" + pathAndJson[0] + "\":" + pathAndJson[1] + "}";
                JObject bd = JObject.Parse(correctJsonStructure);
                //dynamic pathsTest = JsonConvert.DeserializeObject<dynamic>(correctJsonStructure);
                //JObject result = JsonConvert.DeserializeObject<JObject>(correctJsonStructure);
                //Console.WriteLine(bd["/user"]);

            }

在此處輸入圖像描述

swagger.json 文件應具有端點返回的每個實體的完整定義。 您可以按照如何創建 Rest API 客戶端獲取工作客戶端。

我已經處理了一個 API ,其中響應並不總是符合定義。 我首先將所有響應保存到存儲/日志,然后嘗試反序列化 JSON。 如果出現異常,我會將 go 重新存儲/記錄並查看有什么不同並更新我的代碼以適應更改。 幾次迭代后,沒有新的變化,磨難結束了。

希望有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM