使用JSON.NET解析膨胀B



我正在尝试制作一个命令行实用程序来初始化infuxdb数据库,但是我对涌入很新,而C#一般。

通过涌入DB数据库的以下响应,我正在尝试在控制台窗口中打印出来。

理想情况下,我会在标准错误缓冲区中显示错误,并在标准输出中显示警告或信息。

但是,在调试环境中运行下面的代码时,根据我使用过的几个JSONPATH检查器,消息似乎是不正确的。

JSON输入结果。Body

{
  "results": [
    {
      "statement_id": 0,
      "messages": [
        {
          "level": "warning",
          "text": "deprecated use of 'CREATE RETENTION POLICY Primary ON SensorData DURATION 30d REPLICATION 1' in a read only context, please use a POST request instead"
        }
      ]
    }
  ]
}

JSON输出作为转换之前的消息:

messages    {{
  "level": "warning",
  "text": "deprecated use of 'CREATE RETENTION POLICY Primary ON SensorData DURATION 30d REPLICATION 1' in a read only context, please use a POST request instead"
}}  Newtonsoft.Json.Linq.JToken {Newtonsoft.Json.Linq.JObject}

您可以看到,输出消息在嵌套对象{{}}中,而不是预期的数组...

根据https://jsonpath.curiousconcept.com/和其他几个JSONPATH检查员,我期待类似的东西:

[
   {
      "level":"warning",
      "text":"deprecated use of 'CREATE RETENTION POLICY Primary ON SensorData DURATION 30d REPLICATION 1' in a read only context, please use a POST request instead"
   }
]

c#

    private static void PrintResult(IInfluxDataApiResponse result)
    {
        var output = result.Success ? System.Console.Out : System.Console.Error;
        output.WriteLine("["+result.StatusCode + "] : "+result.Body);
        var json = JObject.Parse(result.Body);
        var messages = json.SelectToken("$.results[*].messages[*]"); //outputs an array of messages if exists. e.g. [{level:warning,text:test}]
        if (messages != null)
        {
            var transformed = messages.Select(m => new { level = (string)m["level"], text = (string)m["text]"] }).ToList();
            foreach (var msg in transformed)
            {
                output.WriteLine($"[{result.StatusCode}] : {msg.level} - {msg.text}");
            }
        }
    }

至少使用var messages =

json.SelectTokens("$.results[*].messages[*]"); 

而不是然后

json.SelectToken("$.results[*].messages[*]"); 

允许我解决问题,因为我可以将结果视为c#枚举,而不是特殊的壳体1结果,而selectoken的许多结果似乎将单个结果弄平到一个对象,就像其他实现一样有一个数组。

相关内容

  • 没有找到相关文章

最新更新