Вопрос по c# – Как я могу прочитать JSON с комментарием с Json.NET

34

Чтобы установить внешнее расширение в браузер Google Chrome, я пытаюсь обновить JSON-файл внешнего расширения Chrome. С помощьюJson.NET это кажется легким:

<code>string fileName = "..."; // path to chrome external extension json file

string externalExtensionsJson = File.ReadAllText(fileName);

JObject externalExtensions = JObject.Parse(externalExtensionsJson);
</code>


но я получаюNewtonsoft.Json.JsonReaderException говоря:

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


при звонкеJObject.Parse потому что этот файл содержит:

<code>// This json file will contain a list of extensions that will be included
// in the installer.

{
}
</code>

и комментарии не являются частью JSON (как видно изКак добавить комментарии к выводу Json.NET?).

Я знаю, что я могу удалить комментарии с помощью регулярного выражения (Regex для удаления комментариев в стиле двойной косой черты (//)) но мне нужно переписать JSON в файл после внесения изменений и сохранение комментариев может быть хорошей идеей.

Question: Есть ли способ прочитать JSON с комментариями, не удаляя их и иметь возможность переписать их?

Ваш Ответ

3   ответа
3

но вы всегда можете преобразовать однострочные комментарии в многострочный синтаксис комментариев перед анализом ...

что-то вроде замены ...

.*//.*\n

с

$1/*$2*/

...

Regex.Replace(subjectString, ".*//.*$", "$1/*$2*/");
Error: User Rate Limit Exceeded MuiBienCarlota
Error: User Rate Limit Exceeded//[^'"]*$Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded{url: 'http://www.forever21.com/Product/Product.aspx?br=f21&category=dress&productid=2000062214', photo: 'http://www.forever21.com/images/default_330/00062214-02.jpg'}
Error: User Rate Limit Exceeded
44

ipt, т. Е. / * Комментарий * /

Update: Json.NET 6.0 поддерживает однострочные комментарии

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded MuiBienCarlota
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededError reading JObject from JsonReader. Current JsonReader item is not an object: Comment
Error: User Rate Limit Exceeded MuiBienCarlota
4

eb.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;
}

Похожие вопросы