我如何阅读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?