OpenWRT下自带了两个处理JSON文件的工具。
- 工具一:/usr/bin/jsonfilter
运行/usr/bin/jsonfilter得到如下提示:
![3ab2e40bd19ab2429d3a1cda5ed11654.png](https://i-blog.csdnimg.cn/blog_migrate/3eb853a26e42bd60933133758fb971bf.jpeg)
/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()
从上述函数的名称很容易能看出它的用途。具体使用方法可以自行尝试。等以后使用中再做解释了。