jsonfilter 和 jshn.sh
jsonfilter 和 jshn.sh
来源 https://blog.csdn.net/weixin_39637151/article/details/110610608
OpenWRT下自带了两个处理JSON文件的工具。
- 工具一:/usr/bin/jsonfilter
运行/usr/bin/jsonfilter 得到如下提示:
-a:将输入当数组处理。
-i:指定一个操作的json文件。
-s:指定一段json字符串。
-l:限定输出的最大数量。当输出结果很多时,可以使用这个参数来限定输出数量。
-F:指定特定的分隔符。当使用了非标准分隔符时,可以用该参数指定。
-t:后面跟随key名,结果显示匹配的key的类型
-e:后面跟随key名,结果显示json文件/串里的匹配串的值
关于搜索的pattern,help中提示,该工具实现了:
$, @, [], * 和,
以及常用的表达式等。
由于需要一个完整的javascript引擎来支持,而OpenWRT中没有该引擎,所以它未实现递归的子搜索操作符“..”和过滤表达式'?()'、'()'。
例子:
显示LAN上的第一个IPv4地址:
# ifstatus lan | jsonfilter -e '@["ipv4-address"][0].address'
结果:192.168.1.1 (注:此处结果跟各个具体路由器设置有关)
工具二:/usr/share/libubox/jshn.sh
该工具必须在其他脚本中以source命令引用来使用,它实现了33个函数:
用于解析、生成json的函数22个:
_json_get_var()
_json_set_var()
__jshn_raw_append()
_jshn_append()
_get_var()
_set_var()
_json_inc() {
_json_add_generic()
_json_add_table()
_json_close_table()
json_set_namespace()
json_cleanup()
json_init()
json_add_object()
json_close_object()
json_add_array()
json_close_array()
json_add_string()
json_add_int()
json_add_boolean()
json_add_double()
json_add_null()
用于读取、访问json变量的函数11个:
json_load()
json_load_file()
json_dump()
json_get_type()
json_get_keys()
json_get_values()
json_get_var()
json_get_vars()
json_select()
json_is_a()
json_for_each_item()
jshn.sh用法解析
https://blog.csdn.net/fjlhlonng/article/details/120200364
一、示例用到的json数据
{ "up": true, "uptime": 18804, "l3_device": "eth0.2", "proto": "dhcp", "device": "eth0.2", "ipv4-address": [ { "address": "192.168.5.102", "mask": 24 }, { "address": "192.168.5.103", "mask": 24 } ], "dns-server": [ "1.1.1.1", "2.2.2.2", "223.6.6.6", "223.5.5.5" ] }
上面的数据可以用下面的代码生成并查看:
json_init; json_add_boolean 'up' 1; json_add_int 'uptime' 18804; json_add_string 'l3_device' 'eth0.2'; json_add_string 'proto' 'dhcp'; json_add_string 'device' 'eth0.2'; json_add_array 'ipv4_address'; json_add_object '0'; json_add_string 'address' '192.168.5.102'; json_add_int 'mask' 24; json_close_object; json_add_object '1'; json_add_string 'address' '192.168.5.103'; json_add_int 'mask' 24; json_close_object; json_close_array; json_add_array 'dns_server'; json_add_string '0' '1.1.1.1'; json_add_string '1' '2.2.2.2'; json_add_string '2' '223.6.6.6'; json_add_string '3' '223.5.5.5'; json_close_array; json_dump;
二、jshn.sh中包含的函数
1)json_load以及json_load_file
这两个函数都只有一个参数,前者是一个json字符串,后者是一个文件。
2)json_dump
该函数用于展示通过json_load或者json_load_file加载的数据
3)json_get_type
该函数用于获取对象的数据类型
4)json_get_keys
该函数用于获取对象(当前级别)的所有键
5)json_get_values
该函数用户获取对象的(当前级别)的所有值
6)json_get_var
该函数用于获取指定对象(key)的值
7)json_get_vars
该函数用于获取多个(key)值,它的参数有两种
- 第一种:直接用json文件中的key来获取对应的值,key可以有多个
- 第二种:当字段不存在时,返回一个预设定的值
8)json_select
该函数可以用于选择对象或者返回上一级(或者最外层的对象)
9)json_is_a
用于判断类型
10)json_for_each_item
该函数用于遍历json中的对象或者数组
======== End