目前来说大部分的api接口的返回值都是json形式,比如接码平台,打码平台、百度云识别、自动回复接口、网络验证平台等等,如果我们想要用这些平台功能就需要学会提取json格式。
那么什么是json格式呢?举个例子:
这是我写的一个最简单json格式,看一下它的组成部分。
①有一对大括号
②有两个字符串
③有一个冒号
这里面最明显的特征就是大括号,一般来说当返回值是有大括号的话,基本就是json格式。
确认是json格式以后,就会发现返回值中有很多“多余”的部分,我们只要其中的一部分,如我们这个例子中,我只要的是123这个数字,其余的都不想要。
新手朋友经常会通过几次分割命令把想要的内容分出来,这种方法是没问题,只是看起来有些麻烦。
我们要知道为啥json中有很多的多余内容?
一是json中可能包含多个内容,二是方便我们提取。
写到这里你可能会说,直接返回字符串不是更方便吗,确实是,但是当多个数据(多级数据)时,返回值用字符串就不方便了。
注意:json本质上也是字符串,只是格式特殊。
得到json格式 以后,我们还不能直接提取,需要转成table表格,这一步的转换,在形式上看是没有变化,但是内容类型就不在是字符串,而是table了。
- dim table=encode.jsontotable(json)
复制代码我们来看一下转换后的变化:
样子:
各部分介绍:
一组键名和键值称之为“键值对”。
在例子中a是键名,123是键值,如果要提取123就可以这样写。
- dim table={"a":"123"}TracePrint table["a"]
复制代码提取的方式就是指定table表格中的某个键名,获取它的键值。
重点:所有json的提取都是先转换成table,在用键值对的方式提取。
我们这期文章中的提取方法,本质上来说不是提取json,而是提取table。
复杂的json格式:
(1)多组键值对的
- dim table={"a":"123","b":"234"}TracePrint table["b"]
复制代码多组键值对的,每个键值对直接用逗号分开,这种方法和最简单的一组键值对的完全一样,想要哪个键值,就指定哪个键名提取。
(2)多层键值对
- dim table={"a":{"b":"123"}}TracePrint table["a"]["b"]
复制代码这种形式中,a的键值不在是123这种字符串,而是一个键值对{"b":"123"},我们叫a是1级,b是2级,当然b的键值也可以继续是键值对,那么就是第3级,这个层级无上限。
我们可以认为a是父级,b是子级,两者是父子关系。
提取的时候,从第1级别开始依次写上键名,记住别把父子关系写错名字,或者写差辈分了。
(3)多层级+多个键值对
这个就相当于一个父亲有多个儿子一样,提取的方法和多层级完全一样,注意事项也是别写错名字,别写差辈分。
- dim table={"a":{"b":"123","c":"234"}}TracePrint table["a"]["b"]TracePrint table["a"]["c"]
复制代码(4)索引形式
刚刚写的例子,键名abc可以认为是人名,有些表格是没有名字,只有索引,就像父母叫孩子老大、老二、老三……,索引就是编号。
- dim table={"a":{123,234}}TracePrint table["a"][1]TracePrint table["a"][2]
复制代码这种形式中内部大括号中没有了键名,只有123、234这种键值。
注意:一般在json中,内部这个括号会用方括号,不用大括号。
关于方括号在直接定义表格的时候是不支持的,但是通过json转表后是可以支持的,大家知道就可以了。
(5)索引中是键值对
- dim table={"a":{{"b":"123"},{"c":"234"}}}TracePrint table["a"][1]["b"]TracePrint table["a"][2]["c"]
复制代码这种形式其实是三个层级,父级是a,子级是索引,子级的子级(孙子级别)是b和c。
索引这部分通常是方括号,也就是这样:
- {"a":[{"b":"123"},{"c":"234"}]}
复制代码关于table的形式级别就是这些,那些看起来比较负责的格式,不过是层级比较多。找好父子孙的关系,别写错名字别写差辈分,基本就没问题。
最后写一个自动聊天对接的实际应用案例:
- Dim json=url.get("http://api.qingyunke.com/api.php?key=free&appid=0&msg=你好")TracePrint jsonDim table=encode.JsonToTable(json)TracePrint table["content"]
复制代码- 当前脚本第2行:{"result":0,"content":"好啊~你更好"}当前脚本第4行:好啊~你更好
复制代码内容就这些,欢迎留言写出你的想法,更多内容查看我的往期文章。