如何读取带有 Json.NET 注释的 JSON 内容

本文关键字:NET Json 注释 内容 JSON 何读取 读取 | 更新日期: 2023-09-27 18:32:24

为了将外部扩展程序安装到Google Chrome浏览器中,我尝试更新Chrome外部扩展程序JSON文件。使用Json.NET似乎很容易:

string fileName = "..."; // Path to a Chrome external extension JSON file
string externalExtensionsJson = File.ReadAllText(fileName);
JObject externalExtensions = JObject.Parse(externalExtensionsJson);


但我得到一个Newtonsoft.Json.JsonReaderException说:

"Error parsing comment. Expected: *, got /. Path '', line 1, position 1."


调用JObject.Parse时,因为此文件包含:

// This JSON file will contain a list of extensions that will be included
// in the installer.
{
}

注释不是 JSON 的一部分(如如何在输出中添加注释 Json.NET 如中所述?

我知道我可以使用正则表达式删除注释(用于删除 JavaScript 双斜杠 (//) 样式注释的正则表达式),但我需要在修改后将 JSON 重写到文件中,保留注释可能是一件好事。

有没有办法在不删除注释的情况下读取带有注释的 JSON 内容并能够重写它们?

如何读取带有 Json.NET 注释的 JSON 内容

Json.NET 仅支持阅读多行 JavaScript 注释,即/* commment */

更新:Json.NET 6.0 支持单行注释

如果你坚持使用JavaScriptSerializer(来自System.Web.Script.Serialization命名空间),我发现这足够好用了......

private static string StripComments(string input)
{
    // JavaScriptSerializer doesn't accept commented-out JSON,
    // so we'll strip them out ourselves;
    // NOTE: for safety and simplicity, we only support comments on their own lines,
    // not sharing lines with real JSON
    input = Regex.Replace(input, @"^'s*//.*$", "", RegexOptions.Multiline);  // removes comments like this
    input = Regex.Replace(input, @"^'s*/'*('s|'S)*?'*/'s*$", "", RegexOptions.Multiline); /* comments like this */
    return input;
}

在解析之前,您始终可以将单行注释转换为多行注释语法...

类似替换的东西...

.*//.*'n

$1/*$2*/

Regex.Replace(subjectString, ".*//.*$", "$1/*$2*/");