JSON5 решает две основные болевые точки JSON

JavaScript

Можно сказать, что формат JSON является наиболее популярным форматом передачи данных в настоящее время и широко используется во внешних и внутренних коммуникациях, особенно в приложениях SPA. Данные JSON передаются через протокол HTTP, который имеет преимущества небольшого размера. , легкая сериализация, хорошая читабельность и т.п. преимущество. (Конечно, эти преимущества относительные. Например, небольшой размер относительно XML. Если сравнивать с protobuf, объем намного больше.)

Хотя JSON хорош, есть еще две основные болевые точки, которые огорчают разработчиков:

  • Не могу добавлять комментарии (это недопустимо)
  • Сериализованный ключ заключен в двойные кавычки (объем становится больше)

Как добавлять заметки

Текущий стандарт - нельзя добавлять комментарии.Если хотите добавить комментарии, то можно только через кривую сохранить страну.Например, я сделал так:

{
  "----------base----------": "通用模块变量定义",
  "common": {
    "object_not_exit": "对象 ${id} 不存在!",
    "invalid_username_or_password": "用户名或密码错误!"
  },
  "----------sms----------": "短信模块相关变量",
  "sms": {
    "template_missing_parameters": "模板缺少变量!",
    "param_length_limit": "参数超出长度限制!"
  }
}

В общем, есть три метода:

  • Используйте ключ соглашения в качестве поля аннотации:

    Такие как//,_comment,#####,—--— (#или-номер заказной) в качестве ключа аннотации и т.д.

  • Используйте повторяющийся ключ в качестве комментария:

    То есть каждый ключ используется дважды, первый раз — это комментарий, а второй раз — фактический атрибут.

  • Используйте ключ поля с префиксом ключа аннотации:

    Общие префиксы#, _Ждать.

Можешь убрать двойные кавычки в ключе

Сериализованный ключ заключен в двойные кавычки, например:

const obj = { name: 'keliq', age: 12 }
console.log(JSON.stringify(obj))
// {"name":"keliq","age":12}

Если внимательно понаблюдать, то можно обнаружить, что ключ объекта не имеет двойных кавычек, но после сериализации с обеих сторон добавляются кавычки, в результате чего увеличивается количество символов, и возникает проблема:

  • Зачем заключать ключ в двойные кавычки?
  • Можете ли вы удалить двойные кавычки из ключа?

Вот историческая справка:

В ECMAScript 3 зарезервированные слова нельзя использовать в качестве ключей для объектов, например:

{function: 0} // 语法错误
{if: 0} // 语法错误
{true: 0} // 语法错误

К ключу можно добавить только двойные или одинарные кавычки:

{"function": 0} // Ok
{"if": 0} // Ok
{"true": 0} // Ok

Однако после ES5 зарезервированные слова также можно использовать в качестве ключей, поэтому, не учитывая обратную совместимость, было бы здорово, если бы объект JSON можно было представить точно так же, как объект JavaScript, просто удалив пробелы, символы новой строки и т. д. Ах!

Мощный JSON5

Все, что вы хотите, это есть! ЭтоJSON5Стандартный, он имеет следующие характеристики:

объект

  • Ключ объекта может быть точно таким же, как ключ объекта в JavaScript.
  • может быть запятая в конце

множество

  • может быть запятая в конце

нить

  • Строки можно заключать в одинарные кавычки
  • Строки могут использовать обратные кавычки
  • Строки могут использовать escape-символы

номер

  • Числа могут быть в шестнадцатеричном формате
  • Числа могут начинаться или заканчиваться точкой
  • Числа могут представлять положительную бесконечность, отрицательную бесконечность и NaN.
  • Числа могут начинаться со знака плюс

Комментарий

  • Поддержка однострочных и многострочных комментариев

космос

  • Разрешить дополнительные пробелы

Как видите, JSON5 намного мощнее, чем JSON, и является расширенным набором JSON, точно так же, как TypeScript по сравнению с JavaScript. Способ установки:

npm install json5
# 或者 yarn add json5

Пример сериализации:

const JSON5 = require('json5')
const obj = {
  name: 'keliq',
  age: 12,
}
const res = JSON5.stringify(obj)
console.log(res) // {name:'keliq',age:12}

Пример десериализации:

const JSON5 = require('json5')
const json5str = `// 单行注释
{
  name:'keliq', // 这是姓名
  age:12, /*这是年龄*/
}`
console.log(JSON5.parse(json5str))

Увидев это, я не могу не вздохнуть, вот как должен выглядеть JSON! что ты говоришь?