ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Ваша гарантия аннулирована
Как уже указывалось, этот хак использует преимущества реализации спецификации. Не все анализаторы JSON будут понимать этот тип JSON. В частности, потоковые парсеры будут подавляться.
Это интересное любопытство, но вы действительно не должны использовать его вообще ни для чего . Ниже приведен оригинальный ответ.
Я обнаружил небольшой взлом, который позволяет вам размещать комментарии в JSON-файле, которые не влияют на синтаксический анализ, или каким-либо образом изменять представляемые данные.
Похоже, что при объявлении литерала объекта вы можете указать два значения с одним и тем же ключом, причем последнее имеет приоритет. Хотите верьте, хотите нет, но получается, что парсеры JSON работают одинаково. Таким образом, мы можем использовать это для создания комментариев в исходном JSON, которые не будут присутствовать в разобранном представлении объекта.
({a: 1, a: 2});
// => Object {a: 2}
Object.keys(JSON.parse('{"a": 1, "a": 2}')).length;
// => 1
Если мы применим эту технику, ваш закомментированный файл JSON может выглядеть следующим образом:
{
"api_host" : "The hostname of your API server. You may also specify the port.",
"api_host" : "hodorhodor.com",
"retry_interval" : "The interval in seconds between retrying failed API calls",
"retry_interval" : 10,
"auth_token" : "The authentication token. It is available in your developer dashboard under 'Settings'",
"auth_token" : "5ad0eb93697215bc0d48a7b69aa6fb8b",
"favorite_numbers": "An array containing my all-time favorite numbers",
"favorite_numbers": [19, 13, 53]
}
Код выше действительный JSON . Если вы проанализируете его, вы получите такой объект:
{
"api_host": "hodorhodor.com",
"retry_interval": 10,
"auth_token": "5ad0eb93697215bc0d48a7b69aa6fb8b",
"favorite_numbers": [19,13,53]
}
Это означает, что комментариев нет, и у них не будет странных побочных эффектов.
Счастливого взлома!