跳转至

Json快速入门

Json,这种格式的全名为:JavaScript Object Notation, JS对象简谱,是一种起源于编程语言JavaScript的序列化数据格式,其特点就在于,可以通过特定的文本格式表达一定程度的复杂数据结构,这种复杂的数据结构可以满足程序运行时复杂的功能设计与逻辑设计的需求,所以它也被广泛地用于各种其它的编程语言中。

Json格式包含6个构造字符、5类值、3个字面名。

6个构造字符

它们分别是:

字符 名称
[ 左方括号
] 右方括号
{ 左花括号
} 右花括号
, 逗号
: 冒号

在这些符号前后允许无意义的空格与换行,以让格式变得规整。

5类值

Json中存在5类用于度量和表示的值,他们分别是数字字符串数组对象字面名

数字

数字是最基础的值类型,使用它也只需要简单的输入一个正常的确切数字,可以是小数也可以是整数。

114514

字符串

字符串也是最基础的值类型,它可以用来输入你希望写入的任意字符串,但是为了避免与数字产生歧义,所以它需要在首位使用英文冒号也就是"进行标记。

特别需要注意的是,字符串的标志"不是构造字符,所以字符串不可以进行换行,而空格则会作为字符串的一部分。

"哼哼啊啊啊啊"

数组

不要被数组这样一个陌生的名词吓到,它的英文其实是Array,直译其实就是队列或者数列,也就是说,这是一种表示一串有固定顺序排列的值的格式,并且它的成员支持各种不同类型的值,包括其它的数组,使用这样一种格式的最主要的目的就是罗列和枚举数据,或者记录数据之间的顺序关系。

数组的基本格式是以[作为起始,以]作为结束,以,分隔其中的每个值,同时,还需要记住对于6个构造字符,是可以用空格和换行隔开的,所以我们常常将数组写成如下格式:

[
    114514,
    "哼哼啊啊啊啊",
    [
        "好臭啊"
    ],
    {
        "真的太臭了": "真的"
    }
]

对象

你可能常常听到有关程序员和对象的笑话,其中所说的对象正是这样一种东西。

简单来说,对象是一种拥有很多属性的并对这些属性进行描述的东西,它们通常来自于对于现实问题的抽象,比如说,一个人的对象可以有"身高""性别"这两个属性其对应的值分别可以为1.75"男性",程序员正是用这样的对象,将世间万物进行分类并加以区分的,所以在实际使用中,Json格式绝大多数时候都是以对象作为最外层的结构出现的。

在编程领域,我们通常用更通用的方法,将属性称呼为键(key),属性的值称呼为值(value),一对属性和值称呼为键值对。其中,键值理论上都对其实际值没有限制,但是鉴于不同编程语言的特性各有差异,我们通常不会使用数字字符串以外的类型作为键,而对值的选择范围则没有任何限制1

对象的基本格式是以{作为起始,以}作为结束,每个键值对以,分隔,键值对之中的键与值以:分隔,同样的,还需要记住对于6个构造字符,是可以用空格和换行隔开的,所以我们常常将对象写成如下格式:

{
    "键": "值",
    "身高": 1.75,
    "性别": "男性"
}

3种字面名

除了以上的4种值以外,Json还存在3种特殊的字面名,它们不是数字,也不包含数字,而是可以直接书写的英文单词,在json中表示特殊的意思,它们分别是truefalsenull

布尔值/真假

truefalse是一对布尔值,如果你不知道什么是布尔代数的话,你只需要知道这是一种会在大学中的相关工科专业开设的关键课程,你只需简单的理解为它是区别于数值和字符串的,表示真假状态的值即可。

空/null

null表示的是,在你所学过的数学知识中,你可能通常会用数值0来表示,但是在编程领域,我们需要一个与数值0相区别的更广义的的表示,所以这时便会用到这个

常见范例

对象套数组

{
    "字母牌堆": ["A", "B", "C", "D", "E"],
    "数字牌堆": ["1", "2", "3", "4", "5"]
}

对象的嵌套

{
    "翠花": {
        "身高": 1.75,
        "性别": "女性",
        "是否已婚": true,
        "子女": [
            "小明",
            "小李"
        ]
    },
    "老王": {
        "身高": 1.82,
        "性别": "男性",
        "是否已婚": false,
        "子女": [
            "小明",
        ]
    },
    "猪": {
        "身高": 0.55,
        "性别": "母",
        "是否已婚": null,
        "子女": []
    }
}

数组套对象

[
    {
        "rule": "coc7",
        "keyword": "思想,信念",
        "content": "骰1d10或者选择一个。将你的选择特质化和个人化后,加载到调查员上。\r\n1:你信仰并祈并一位大能。(例如毗沙门天、耶稣基督、海尔·塞拉西一世)\r\n2:人类无需上帝。(例如坚定的无神论者,人文主义者,世俗主义者)\r\n3:科学万能!科学万岁!你将选择其中之一。(例如进化论,低温学,太空探索)\r\n4:命中注定。(例如因果报应,种姓系统,超自然存在)\r\n5:社团或秘密结社的一员。(例如共济会,女协,匿名者)\r\n6:社会坏掉了,而你将成为正义的伙伴。应斩除之物是?(例如毒品,暴力,种族歧视)\r\n7:神秘依然在。(例如占星术,招魂术,塔罗)\r\n8:诸君,我喜欢政治。(例如保守党,共产党,自由党)\r\n9:“金钱就是力量,我的朋友,我将竭尽全力获取我能看到的一切。”(例如贪婪心,进取心,冷酷心)\r\n10:竞选者/激进主义者。(例如女权运动人,平等主义家,工会权柄)"
    },
    {
        "rule": "coc7",
        "keyword": "重要之人",
        "content": "骰1D10或在下列两表中各选择1个。将所选之物特质化和个人化后,加载到调查员身上。当然,别忘了给他们取个名字。\r\n首先,他们是谁?\r\n1:父辈。(例如母亲,父亲,继母)\r\n2:祖父辈。(例如外祖母,祖父)\r\n3:兄弟。(例如妹妹,半血亲妹妹,无血缘妹妹)\r\n4:孩子。(儿子或女儿)\r\n5:另一半。(例如配偶,未婚夫,爱人)\r\n6那位指引你人生技能的人。指明该技能和该人。(例如学校教师,师傅,父亲)\r\n7:青梅竹马。(例如同学,邻居,幼驯染)\r\n8:名人。偶像或者英雄。当然也许你从未见过他。(例如电影明星,政治家,音乐家。)\r\n9:游戏中的另一位调查员伙伴。随机或自选。\r\n10:游戏中另一外NPC。详情咨询你的守秘人。\r\n然后,骰或选为什么这人对你如此重要。下列选项不会对所有人都有意义,所以你可以骰多次或者直选合适的理由。\r\n1:你欠了他们人情。他们帮助了你什么?(例如,经济上,困难时期的庇护,给你第一份工作)\r\n2:他们教会了你一些东西。(例如,技能,如何去爱,如何成为男子汉)\r\n3:他们给了你生命的意义。(例如,你渴望成为他们那样的人,你苦苦追寻着他们,你想让他们高兴)\r\n4:你曾害了他们,而现在寻求救赎。例如,偷窃了他们的钱财,向警方报告了他们的行踪,在他们绝望时拒绝救助)\r\n5:同甘共苦。(例如,你们共同经历过困难时期,你们携手成长,共同度过战争)\r\n6:你想向他们证明自己。(例如,自己找到工作,自己搞到老婆,自己考到学历)\r\n7:你崇拜他们。(例如,崇拜他们的名头,他们的魅力,他们的工作)\r\n8:后悔的感觉。(例如,你本应死在他们面前,你背弃了你的誓言,你在可以助人之时驻足不前)\r\n9:你试图证明你比他们更出色。他们的缺点是?(例如,懒惰,酗酒,冷漠)\r\n10:他们扰乱了你的人生,而你寻求复仇。发生了什么?(例如,射杀爱人之日,国破家亡之时,明镜\r\n两分之际)"
    },
    {
        "rule": "coc7",
        "keyword": "意义非凡之地",
        "content": "骰1D10或直接选一个。将所选之物特质化和个人化后,加载到调查员身上。当然也别忘了取名字。\r\n1:你最爱的学府。(例如,中学,大学)\r\n2:你的故乡。(例如,乡下老家,小镇村,大都市)\r\n3:相识初恋之处。(例如,音乐会,度假村,核弹避难所)\r\n4:静思之地。(例如,图书馆,你的乡土别墅,钓鱼中)\r\n5:社交之地。(例如,绅士俱乐部,地方酒吧,叔叔的家)\r\n6:联系你思想/信念的场所。(例如,小教堂,麦加,巨石阵)\r\n7:重要之人的坟墓。(例如,另一半,孩子,爱人)\r\n8:家族所在。(例如,乡下小屋,租屋,幼年的孤儿院)\r\n9:生命中最高兴时的所在。(例如,初吻时坐着的公园长椅,你的大学)\r\n10:工作地点。(例如,办公室,图书馆,银行)"
    },
    {
        "rule": "coc7",
        "keyword": "宝贵之物",
        "content": "骰1D10或直接选一个。将所选之物特质化和个人化后,加载到调查员身上。\r\n1:与你得意技相关之物。(例如华服,假ID卡,青铜指虎)\r\n2:职业必需品。(例如医疗包,汽车,撬锁器)\r\n3:童年的遗留物。(例如漫画书,随身小刀,幸运币)\r\n4:逝者遗物。(例如烛堡,钱包里的遗照,信)\r\n5:重要之人给予之物。(例如戒指,日志,地图)\r\n6:收藏品。(例如撤票,标本,记录)\r\n7:你发掘而不知真相的东西。答案追寻中。(例如,橱柜里找到的未知语言信件,一根奇怪的从父亲出继承来的来源不明的风琴,花园里挖出来的奇妙的银球)"
    }
]

  1. 当然,局限性实际上总是会有的,像是有些语言中无法直接区分来自Json的false0null"",比如说Go。