Можно сказать, что формат 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! что ты говоришь?