首页 > 其他分享 >jsonfilter 和 jshn.sh

jsonfilter 和 jshn.sh

时间:2023-04-19 23:24:51浏览次数:49  
标签:string get jshn add jsonfilter json sh address

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

 

标签:string,get,jshn,add,jsonfilter,json,sh,address
From: https://www.cnblogs.com/lsgxeva/p/17335057.html

相关文章

  • 部署kubernetes-dashboard顺便搞懂kubernetes中的ServiceAccount和RBAC
    "种草"kubernetes-dashboard安装部署dashboard创建用于登录面板的ServiceAccount权限控制"种草"kubernetes-dashboardKubernetesDashboard是通用的用于管理Kubernetes集群的WebUI面板kubernetes-dashboard代码库readme中对自己的介绍:KubernetesDashboardi......
  • Chatgpt 帮忙写的脚本_使用powershell 写一段代码,功能实现将指定目录下多个csv 文件整
    需求:使用powershell写一段代码,功能实现将指定目录下多个csv文件整合成一个csv文件以下是使用PowerShell实现将指定目录下多个CSV文件合并为一个的示例代码:powershell点击查看代码#设置源目录和目标文件路径$sourceDirectory="C:\path\to\csv\files"$targetFilePa......
  • Chatgpt 帮忙写的脚本_用shell 写一段代码,要求获取指定目录下的所有文件的 文件路径、
    需求:用shell写一段代码,要求获取指定目录下的所有文件的文件路径、文件名、文件创建时间,文件最后修改时间,并将结果导出到指定路径的csv格式文件中以下是使用Shell实现获取指定目录下所有文件的路径、名称、创建时间和修改时间,并将结果导出到CSV文件的示例代码:点击查看代......
  • Chatgpt 帮忙写的脚本_用shell 写一段代码,要求获取指定路径下所有的文件夹,并统计每个
    需求:用shell写一段代码,要求获取指定路径下所有的文件夹,并统计每个文件夹所包含的文件个数,将文件路径,包含的文件数输出到指定路径的CSV格式文件中以下是使用Shell实现获取指定路径下所有文件夹,并统计每个文件夹中包含的文件个数,并将结果导出到CSV文件的示例代码:点击查看......
  • SSH(网络安全协议)
    SSH的安全机制    SSH之所以能够保证安全,是由于它采用了非对称加密技术(RSA)加密了所有传输的数据。传统的网络服务程序,如FTP、和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人攻击。就是存在另一个人或者一台机器冒......
  • java学习日记20230415-LinkedHashSet源码
    LinkedHashSet全面说明:LinkedHashSet是HashSet子类;底层是一个LinkedHashMap,底层维护了一个数组和双向链表根据元素的hashCode值来决定元素的位置,同时使用链表维护元素的次序,使得元素看起来是以插入的顺序保存的不允许添加重复元素维护了一个hash表和双向链表,每个节点有pre和......
  • ASRock Z690 Extreme WiFi 6E i7 13700KF电脑 Hackintosh 黑苹果efi引导文件
    原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔)硬件型号驱动情况主板ASRockZ690ExtremeWiFi6E处理器IntelCorei713700KF已驱动内存KINGBANK2x32GBDDR4-3600CL18已驱动硬盘PredatorSSDGM70001TB已驱动显卡YESTONRX6800XT16G已驱动声卡ConexantCX8070......
  • 关于shell变量值的截取-通过分隔符-去除前后匹配到的内容
    最近在工作中需要取一个变量的一部分值,举例说明,先看一个变量及值的格式,如Server="1.1.1.1-server01"我们可以通过各种支持切片的命令得到server01这一段,如cut,sed,awk等等命令其实当熟悉shell编程的可以知道,shell内部的变量处理方式也是可以得到的,可以通过echo${Server#*-}的......
  • 程序员必备上传服务器Xftp及连接服务器工具Xshell
    1.下面截图为破解工具,点击执行就可以用了 ......
  • sshd配置文件详解
    转自:http://blog.licess.com/sshd_config/#1.关于SSHServer的整体设定,包含使用的port啦,以及使用的密码演算方式Port22#SSH预设使用22这个port,您也可以使用多的port!#亦即重复使用port这个设定项目即可!Protocol......