Можно ли использовать комментарии в формате JSON? - PullRequest
6607 голосов
/ 28 октября 2008

Могу ли я использовать комментарии внутри файла JSON? Если да, то как?

Ответы [ 47 ]

2 голосов
/ 08 июля 2018

*. JSON-файлы обычно используются в качестве файлов конфигурации или статических данных, поэтому нужны комментарии → некоторые редакторы, такие как NetBeans, принимают jcomments в * .json.

Проблема заключается в анализе содержимого объекта. Решение состоит в том, чтобы всегда применять функцию очистки (сервер или клиент).

PHP

 $rgx_arr = ["/\/\/[^\n]*/sim", "/\/\*.*?\*\//sim", "/[\n\r\t]/sim"];
 $valid_json_str = \preg_replace($rgx_arr, '', file_get_contents(path . '*.json'));

JavaScript

valid_json_str = json_str.replace(/\/\/[^\n]*/gim,'').replace(/\/\*.*?\*\//gim,'')
1 голос
/ 02 июля 2015

Существуют другие библиотеки, совместимые с JSON, которые поддерживают комментарии.

Одним примечательным примером является "Hashcorp Language" (HCL) ". Он написан теми же людьми, которые сделали Vagrant, упаковщик, консул и хранилище.

1 голос
/ 11 февраля 2016

Вы можете использовать JSON-LD и тип комментария schema.org , чтобы правильно писать комментарии:

{
    "https://schema.org/comment": "this is a comment"
}
1 голос
/ 19 марта 2019

Конечно, вы можете комментировать JSON. Чтобы прочитать JSON-файл с комментариями из javascript, вы можете удалить комментарии перед его анализом (см. Код ниже). Я уверен, что этот код можно улучшить, но его легко понять тем, кто использует регулярные выражения.

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

fetch(filename).then(function(response) {
    return response.text();
}).then(function(commented) {
    return commented.
        replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm, '$1').
        replace(/\r/,"\n").
        replace(/\n[\n]+/,"\n");
}).then(function(clean) {
    return JSON.parse(clean);
}).then(function(json) {
    // Do what you want with the JSON object.
});
0 голосов
/ 06 апреля 2019

Я столкнулся с этой проблемой в моем текущем проекте, так как у меня есть немного JSON, который требует некоторого комментирования, чтобы было легче запомнить.

Я использовал эту простую функцию python для замены комментариев и использовал json.loads для преобразования в dict:

import json, re

def parse_json(data_string):
  result = []
  for line in data_string.split("\n"):
    line = line.strip()
    if len(line) < 1 or line[0:2] == "//":
      continue
    if line[-1] not in "\,\"\'":
      line = re.sub("\/\/.*?$", "", line)
    result.append(line)
  return json.loads("\n".join(result))

print(parse_json("""
{
  // This is a comment
  "name": "value" // so is this
  // "name": "value"
  // the above line gets removed
}
"""))
0 голосов
/ 08 июля 2014

Да, вы можете, но ваш анализ, вероятно, не удастся (стандарт не существует).

Чтобы разобрать его, вы должны удалить эти комментарии, либо вручную, либо используя регулярное выражение:

Заменяет любые комментарии, например:

/****
 * Hey
 */

/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*\/+/

Заменяет любые комментарии, например:

// Hey

/\/\/.*/

В JavaScript вы можете сделать что-то вроде этого:

jsonString = jsonString.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*\/+/, "").replace(/\/\/.*/,"")
var object = JSON.parse(jsonString);
0 голосов
/ 16 декабря 2018

Весь этот поток предполагает, что добавление комментариев является единственным улучшением, которое необходимо внести в JSON. Если кто-то не хочет комментировать в JSON, потому что он будет использоваться для сериализации, просто опустите комментарии. То же самое касается пробелов. Но зачем останавливаться на достигнутом? Почему кавычки обязательны в JSON? Они не добавляют ничего полезного.

Единственная причина, по которой я могу думать, что JSON настолько жесток, заключается в том, что синтаксический анализ затруднен. Но это не так. Почти любой программист может написать анализатор JSON в любом направлении.

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

{stringA: stringB, stringC: stringD, [stringE, stringF]}

Короче, чем любая существующая спецификация JSON, но такая же удобочитаемая и эффективная.

Нужно включить кавычки, апострофы, запятые или скобки в свойство или значение? Просто заключите их в вопросительные знаки или апострофы (с обратной косой чертой), как в JavaScript.

Но, пожалуйста, делайте кавычки необязательными. Зачем? Поскольку JSON не может содержать имена переменных или функций (чтобы избежать атак внедрения), поэтому кавычки не дают никакой неоднозначности. Мы уже знаем, что все данные являются строками. Поэтому, пожалуйста, оставьте кавычки уже, если они действительно не нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...