InfluxDBデータベースを初期化するためのコマンドラインユーティリティを作成しようとしていますが、私はかなり流通しています。JSON.netを使用したInfluxDBの結果の解析
Influx DBデータベースからの次の応答では、私はコンソールウィンドウでこれをきれいに印刷しようとしています。
理想的には、標準エラーバッファにエラーが表示され、警告または情報が標準出力に表示されます。
しかし、デバッグ環境で以下のコードを実行すると、私が使用しているいくつかのjsonpathチェッカーによると、メッセージが不正な形式になっているように見えます。 result.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出力としてメッセージとして変換前
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}
あなたが見ることができるように、メッセージ出力は、ネストされたオブジェクトである{{}}むしろ
01:予想通り、配列...は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}");
}
}
}
デバッガで混乱している可能性がありますか? '{...}}'というメッセージがjsonでも有効ではないので、JSON.NETはそれを解析しません。 – Evk