我如何阅读json与Json.NET的评论

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

string fileName = "..."; // path to 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仅支持阅读多行JavaScript注释,即/ * commment * /

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


有点迟了,但在解析之前,您总是可以将单行注释转换为多行注释语法...

像替换...

.*//.*n

$1/*$2*/

...

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

如果你使用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;
}
链接地址: http://www.djcxy.com/p/3393.html

上一篇: How can i read json with comment with Json.NET

下一篇: What is the difference between JSON and Object Literal Notation?