jsonfilter 和 jshn.sh
jsonfilter 和 jshn.sh
来源 https://blog.csdn.net/weixin_39637151/article/details/110610608
OpenWRT下自带了两个处理JSON文件的工具。
- 工具一:/usr/bin/jsonfilter
运行/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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2020-04-19 C++智能指针
2020-04-19 Qt 中的智能指针
2020-04-19 保持Qt程序中GUI的响应流畅
2020-04-19 Qt中的消息通知和事件发送