在开发Panda Api的最初版本,文档是用json来写的,json语法不支持注释,不支持字符串换行,所有的key都必须双引号,末尾不能有多余的逗号...等等,一大堆极其严格的要求和不支持的功能。
一开始,我就自己增加了json编译器,来对json语法进行拓展,直到发现了json5,这完全就是我想要的!json5拓展的特性,让人用起来怎一个爽字了得。
JSON5是对JSON的扩展,让人可以更容易手工编写和维护。
JSON5的特性如下:
对象 Objects
- key值允许没有双引号 Object keys may be an ECMAScript 5.1 IdentifierName.
{
code:1,
msg:"Hello"
}
- 允许有多余的逗号结尾 Objects may have a single trailing comma.
{
code:1,
msg:"Hello",
}
- key值可以使用单引号来包裹 Arrays may have a single trailing comma.
{
$name:"HellO",
code:1,
msg:"Hello",
}
数组 Arrays
- 允许有多余的逗号结尾
[1, 2, 3,]
字符串 Strings
- 允许使用单引号包裹字符串 Strings may be single quoted.
{
$name:'HellO',
code:1,
msg:'Hello',
}
- 字符串可以换行,可以多行 Strings may span multiple lines by escaping new line characters
{
$name:'HellO',
$desc:"hello
world!
haha!
",
code:1,
msg:'Hello',
}
- 字符串允许使用转义字符 Strings may include character escapes.
{
code:1,
msg:"Hello\nWorld\n!",
}
数字 Numbers
- 数字可以用十六进制表示 Numbers may be hexadecimal.
{
code:0xFF
}
- 允许使用小数点开头或结尾的数字,例如:
.007,7.Numbers may have a leading or trailing decimal point.
{
a:.007,
b:7.
f:-.32e-3
}
- 数字可以使用正无穷大、负无穷大、和Nan 来表示, Numbers may be IEEE 754 positive infinity, negative infinity, and NaN.
{
p:Infinity,
n:-Infinity,
b:NaN
}
- 数字前面可以有一个正号
+Numbers may begin with an explicit plus sign. { a:+10 }
注释 Comments
- 支持单行注释和多行注释 Single and multi-line comments are allowed.
{
// code表示结果代码
code:1
msg:"返回结果说明"
/*
json5的多行注释
真是好爽啊,
完全就是为Panda api而设计的
*/
}
允许多余的空白符 White Space
- 允许在任何在json5相关符号之前和之后都可能出现多余的空白符。 Additional white space characters are allowed. 支持的空白符如下:
Code Points Description
U+0009: Horizontal tab
U+000A: Line feed
U+000B: Vertical tab
U+000C: Form feed
U+000D: Carriage return
U+0020: Space
U+00A0: Non-breaking space
U+2028: Line separator
U+2029: Paragraph separator
U+FEFF: Byte order mark
Unicode: Zs category Any other character in the Space Separator Unicode category
官方相关说明介绍:
Panda Aip 我个人春节假期期间开发的接口设计工具,只需要写简单的json5,就能够生成接口文档、提供接口模拟服务(在你没写任何代码之前)、自动测试后端接口,可以对开发的效率和质量大幅的提升。
这是在掘金上的一篇介绍文章: juejin.cn/post/684490…
这个是github源代码地址: github.com/arlicle/pan…
这个是项目介绍地址: www.debugmyself.com/p/2020/1/24…