【发布时间】:2019-02-04 06:53:38
【问题描述】:
我正在尝试使用 Json.NET 解析逗号分隔的 JSON 对象文件:
{
JSON ...
},
{
JSON ...
},
{
JSON ...
}
如果流不包含分隔符(即上面的逗号被删除),下面的代码可以正常工作。但是,逗号会产生一个无限循环,即使在到达文件末尾之后,Json.NET 也会继续读取“未定义”令牌:
using (StreamReader fReader = File.OpenText("filename.json"))
using (JsonTextReader jReader = new JsonTextReader(fReader))
{
jReader.SupportMultipleContent = true;
while (jReader.Read())
{
var jToken = JToken.ReadFrom(jReader);
if (jToken is JObject)
Console.WriteLine("JSON object: " + ((JObject)jToken).ToString());
}
}
我尝试通过提前阅读并使用 JsonTextReader 的 Skip() 方法来跳过逗号,但这不起作用:JsonTextReader 显然会提前缓冲,吃掉逗号,导致消化不良。
很难相信我会是第一个遇到这个问题的人,但是尽管在这里搜索了很多,但我还没有找到任何相关的帖子(至少对于 C# 和 Json.NET)。真的有必要从头开始破解吗?
ETA:根据下面 Brian Rogers 的评论,Json.NET 11.0.1 及更高版本处理逗号分隔的 JSON,所以上面的现在可以正常工作,不管逗号与否。
【问题讨论】:
-
对我来说听起来像是XY problem。最好不要一开始就生成无效的 JSON 文件。
-
是的,但是这些文件来自我无法控制的外部来源(我意识到它们格式不正确)。如果有更好的方法,我会非常乐意放弃我尝试过的解决方案。
-
升级到 Json.Net 11.0.1 或更高版本。它支持您使用阅读器上的
SupportMultipleContent设置尝试执行的操作。请参阅链接的重复问题的第二个答案。
标签: json json.net jsonparser