首页 > 解决方案 > 在不知道结构的情况下使用 Newtonsoft.Json 解析 JSON

问题描述

我正在从事一个涉及使用 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"
        }
      }
    }
  }

如果我只想解析该路径并检索方法对象,我该如何考虑有时对象将是“发布”或有时它将是“获取”、“放置”等,具体取决于路径允许的内容.

            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"]);

            }

在此处输入图像描述

标签: c#jsonjson.netswagger

解决方案


swagger.json 文件应该包含端点返回的每个实体的完整定义。您可以按照如何创建 Rest API 客户端来获取工作客户端。

我处理了一个 API,其中响应并不总是符合定义。我首先将所有响应保存到存储/日志,然后尝试反序列化 JSON。如果出现异常,我会返回存储/日志并查看有什么不同并更新我的代码以适应更改。几次迭代后,没有新的变化,磨难结束了。

希望有帮助。


推荐阅读