Json.NETにあなたがJTokenWriter
にJsonTextReader
から、あなたの文字列をストリームと切り捨てJSONを解析する場合にスローされますJsonReaderException
をキャッチし、嚥下によって部分的な結果を得ることができます8.0.3のようになります。
JToken root;
string exceptionPath = null;
using (var textReader = new StringReader(badJson))
using (var jsonReader = new JsonTextReader(textReader))
using (JTokenWriter jsonWriter = new JTokenWriter())
{
try
{
jsonWriter.WriteToken(jsonReader);
}
catch (JsonReaderException ex)
{
exceptionPath = ex.Path;
Debug.WriteLine(ex);
}
root = jsonWriter.Token;
}
Console.WriteLine(root);
if (exceptionPath != null)
{
Console.WriteLine("Error occurred with token: ");
var badToken = root.SelectToken(exceptionPath);
Console.WriteLine(badToken);
}
これは、その結果:あなたは、その後で部分オブジェクトをデシリアライズ終えることができました
[
{
"key": "value1"
},
{
"key ": "value2"
},
{}
]
JToken.ToObject
。 badToken.Remove()
を使用して、不完全な配列エントリを削除することもできます。
最初は無効なJSONを生成しないほうがよいでしょう。私はこれがJson.NETの文書化された機能であることも完全には分かっていないので、Json.NETの将来のバージョンでは動作しない可能性があります。 (例えば、Newtonsoftは、JTokenWriter.Token
が書き込みが成功したときにのみ設定されるようにアルゴリズムを変更する可能性があります)。
出典
2016-04-12 15:23:29
dbc
JSONはHTMLではないため、無効なデータの回避策を実装するライブラリを増やす理由はありません。あなたはおそらくJSONを処理するためにコンピュータ言語を使用しています。そのようなlang(C#?)からの文字列操作関数を使って前処理を実装するのは難しいことではありません。 –