我有一些不完整的JSON有效载荷(例如,从中期转移失败的HTTP连接)。下载的部分是有效的,但是下载可以在任何时候断开。
使用json.net,如何推断JSON有效载荷的其余部分?
。
。
。
好吧,开玩笑。
我真正想要的是(使用json.net)将我拥有的块尽可能地转换为有效的JSON。
JSON有效载荷的格式是未知的先验。
这是JSON损坏的示例
- 阅读时观看您的步骤,它突然结束:
var broken = @"[
{'key':'value'},
{'Tables': [
{
'TableName': 'Table_0',
'Columns': [
{
'ColumnName': 'Enabled',
'DataType': 'String',
}
],
'Rows': [
[
'False',
'getuser'
";
每当我需要使用JSON.NET获得低级时,我最终都会使用流读取器/作家。
事实证明,JsonTextWriter
具有魔术属性AutoCompleteOnClose
,它可以在关闭作者时添加任何"待处理"的"终结"。
var broken = @"[
{'key':'value'},
{'Tables': [
{
'TableName': 'Table_0',
'Columns': [
{
'ColumnName': 'Enabled',
'DataType': 'String',
}
],
'Rows': [
[
'False',
'getuser',
{'fdsa':
";
using (var sw = new StringWriter())
{
var wr = new JsonTextWriter(sw)
{
AutoCompleteOnClose = true, //simple - just ask the writer to fill in any missing closing tokens
Formatting = Newtonsoft.Json.Formatting.Indented
};
using (wr)
{
using (var rdr = new JsonTextReader(new StringReader(broken)) { CloseInput = true })
{
try
{
wr.WriteToken(rdr);
}
catch { /* swallow the read error and keep on trucking */ }
}
} //json writer is closed now
Console.WriteLine(sw.ToString());
}
这是它产生的输出:
[
{
"key": "value"
},
{
"Tables": [
{
"TableName": "Table_0",
"Columns": [
{
"ColumnName": "Enabled",
"DataType": "String"
}
],
"Rows": [
[
"False",
"getuser",
{
"fdsa": null
}
]
]
}
]
}
]