Разбор JSON с использованием Newtonsoft. Json без знания структуры - PullRequest
1 голос
/ 18 июня 2020

Я работаю над проектом, который включает автоматизацию вызовов API с использованием определения Swagger. Качаю файл swagger. json. Структура объекта JSON, который мне нужно проанализировать, несовместима. При синтаксическом анализе путей существует список объектов, а в нем есть методы, которые можно использовать для указанного c пути. Я могу получить только путь, используя различные строковые методы, но мой вопрос был в том, есть ли хороший способ проанализировать 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"
        }
      }
    }
  }

Если бы я хотел просто проанализировать этот путь и получить объект метода, как бы я мог go об этом, учитывая, что иногда объект будет «постить», а иногда это будет «получить», «положить» и т. д. c в зависимости от того, что допустимо для пути.

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

            }

enter image description here

1 Ответ

1 голос
/ 18 июня 2020

Файл swagger. json должен содержать полное определение каждой сущности, возвращаемой конечными точками. Вы можете следовать Как создать клиент Rest API , чтобы получить рабочий клиент.

Я имел дело с API, ответы которого не всегда соответствовали определению. Я сначала сохранил все ответы в магазине / журнале, а затем попытался десериализовать JSON. В случае исключения я бы go вернулся в хранилище / журнал, посмотрел, что изменилось, и обновил свой код, чтобы учесть это изменение. После нескольких итераций новых изменений не было, и испытание закончилось.

Надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...