Newtonsoft.Json を使用して、テスト ステーションから生成された JSON ログを解析しようとしています。テスト プロセスによって JSON コンテンツがわずかに破損する可能性があるため、破損したデータを解析できる必要があります。より具体的には、パーサーが破損または認識できない文字に遭遇した場合、現在の行をスキップして、次の行で解析を続行したいと考えています。
ライブラリを調べていますが、まだ解決策が見つかりません。パーサーが停止しているスニペットを次に示します。パーサーから独立してストリームを進めることができないようです。
StringBuilder jsonBuffer = new StringBuilder();
jsonBuffer = "...";
StringReader sr = new StringReader(jsonBuffer.ToString());
JsonTextReader jr = new JsonTextReader(sr);
jr.SupportMultipleContent = true;
bool go = true;
while (go) {
try {
go = jr.Read();
} catch (Exception e) {
Console.Write("Oops! JSON Read Exception: ");
Console.WriteLine(e.Message);
// can't continue past here...
}
if (!go || jr.TokenType == JsonToken.Undefined) break;
if (jr.Value != null)
Console.WriteLine("Token: {0}, Value: {1}", jr.TokenType, jr.Value);
else
Console.WriteLine("Token: {0}", jr.TokenType);
}
私がスキップしたいと思っている破損の種類のいくつかの例:
- "キー": ""二重引用符で囲まれた値""
- "key": "不完全な値
- ']' または '}' の欠落などの不完全なオブジェクト
ネストされたオブジェクトをアンロールするには、最後のアイテムがより複雑なロジックを必要とすることはわかっていますが、これは「あると便利」ですが、1 と 2 は必須です。
どんな助けでも大歓迎です!
ありがとう、ジョン