Json如何"fix"不完整的JSON?



我有一些不完整的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
            }
          ]
        ]
      }
    ]
  }
]

相关内容

  • 没有找到相关文章

最新更新