44

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コンテンツを削除せずに読み取り、書き換えることができる方法はありますか?

4

3 に答える 3

56

Json.NETは、複数行のJavaScriptコメント、つまり/*コメント*/の読み取りのみをサポートします。

更新: Json.NET6.0は1行コメントをサポートします

于 2012-04-25T23:54:18.800 に答える
4

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;
}
于 2015-07-28T15:36:40.933 に答える
3

解析する前に、いつでも1行コメントを複数行コメント構文に変換できます...

交換のようなもの...

.*//.*\n

$1/*$2*/

..。

Regex.Replace(subjectString, ".*//.*$", "$1/*$2*/");
于 2013-05-13T00:12:22.000 に答える