04-23 周二 shell环境下读取使用jq 读取json文件

04-23 周二 shell环境下读取使用jq 读取json文件
时间版本修改人描述
04-23V0.1宋全恒新建文档

简介

工具列表

Shell脚本处理JSON数据工具jq

jshon是另外一个读取json数据的工具 而且其支持XML和YAML格式文件

linux shell环境下处理yml文件

#!/bin/bash
 
# 加载shyaml库
. /usr/local/bin/shyaml.sh
 
# 读取YAML文件
mapfile -t yaml_content < config.yaml
 
# 解析YAML内容
eval $(shyaml parse <<<"${yaml_content[*]}")
 
# 使用解析出来的变量
echo $name
echo ${servers[0]}

[如何在shell脚本中从yaml文件读取特定数据](javascript:void(0)😉

看来要用shyaml 和yq来进行参数的读取。

  • json
    • jq
    • jshon
  • yaml文件
    • shyaml
    • yq

使用cat和jq演示配置文件的读取

配置文件config.json

ci_repositories:
  - user: "user1"
    passwd: "password1"
    url: "http://ci.example.com/repository1"
    tags:
      - "tag1"
      - "tag2"
      - "tag3"
  - user: "user2"
    passwd: "password2"
    url: "http://ci.example.com/repository2"
    tags:
      - "tag4"
      - "tag5"
  - user: "user3"
    passwd: "password3"
    url: "http://ci.example.com/repository3"
    tags: []

注: 上述展示了一个yaml文件,在下面程序运行时,应该将其转化为json文件。

yangfei@ubuntu:/home/songquanheng/json$ cat config.json 
{
  "ci_repositories": [
    {
      "user": "user1",
      "passwd": "password1",
      "url": "http://ci.example.com/repository1",
      "tags": [
        "tag1",
        "tag2",
        "tag3"
      ]
    },
    {
      "user": "user2",
      "passwd": "password2",
      "url": "http://ci.example.com/repository2",
      "tags": [
        "tag4",
        "tag5"
      ]
    },
    {
      "user": "user3",
      "passwd": "password3",
      "url": "http://ci.example.com/repository3",
      "tags": []
    }
  ]
}

程序脚本

#!/bin/bash
  
# 读取 JSON 文件并遍历 ci_repositories
jq -c '.ci_repositories[]' config.json | while IFS= read -r repository; do
    # 从每个 repository 中提取 user、passwd、url 和 tags
    User=$(echo "$repository" | jq -r '.user')
    Passwd=$(echo "$repository" | jq -r '.passwd')
    Url=$(echo "$repository" | jq -r '.url')

    # 将 Tags 数组存储为 Shell 数组变量
    Tags=$(echo "$repository" | jq -r '.tags | join(" ")')
    read -r -a TagsArray <<<"$Tags"

    # 获取 TagsArray 数组的长度
    TagsLength=${#TagsArray[@]}

    # 获取 TagsArray 数组的第一个元素
    Tag1=${TagsArray[0]}

    # 打印变量值(可替换为你想要的处理逻辑)
    echo "User: $User"
    echo "Passwd: $Passwd"
    echo "Url: $Url"
    echo "Tags: ${TagsArray[@]}"
    echo "Tags Length: $TagsLength"
    echo "Tag at index 1: $Tag1"
    echo "------------------------"
done

代码解析

 代码解析

image-20240423143052301

shell执行结果

 上述的代码,在执行时输出了如下的结果

songquanheng@ubuntu:~/json$ bash b.sh 
User: user1
Passwd: password1
Url: http://ci.example.com/repository1
Tags: tag1 tag2 tag3
Tags Length: 3
Tag at index 1: tag1
------------------------
User: user2
Passwd: password2
Url: http://ci.example.com/repository2
Tags: tag4 tag5
Tags Length: 2
Tag at index 1: tag4
------------------------
User: user3
Passwd: password3
Url: http://ci.example.com/repository3
Tags: 
Tags Length: 0
Tag at index 1: 

总结

 上文演示了使用jq读取yaml的配置文件,并且处理了解读过程中的配置文件。通过使用在shell中使用jq命令,我们可以非常方便的进行配置文件的读取。非常的方便。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/598117.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络学习记录Day1

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 计算机网络学习记录Day1 本文基于1.1 计算机网络在信息…

信创基础软件之中间件

信创基础软件之中间件 中间件概述 中间件是一种应用于分布式系统的基础软件&#xff0c;位于应用与操作系统、数据库之间&#xff0c;主要用于解决分布式环境下数据传输、数据访问、应用调度、系统构建和系统集成、流程管理等问题&#xff0c;是分布式环境下支撑应用开发、运…

学习记录:AUTOSAR R20-11的阅读记录(五)【CP(5.11-5.19)】完

接上回&#xff1a;学习记录&#xff1a;AUTOSAR R20-11的阅读记录&#xff08;四&#xff09;【CP&#xff08;5.6-5.10&#xff09;】 五、CP 11、General&#xff08;4个&#xff09; 5.11 File Name 说明 1 AUTOSAR_EXP_ LayeredSoftwareArchitecture.pdf 描述了AUTO…

AIGC (AI-Generated Content) 技术深度探索:现状、挑战与未来愿景

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 &#x1f916; AIGC技术&#xff1a;塑造未来的创意与内容革命 &#x1f31f;引言 &#x1f680;AIGC技术发展现状 &#x1f4c8;核心技术驱动 &#x1f4a1;应用领域拓展 &#x1f310; 面临的挑战 ❌真实性与伦理考量 &am…

Spring @Repository 注解

Spring 的项目严重依赖注解。 Repository 注解 在Spring2.0之前的版本中&#xff0c;Repository注解可以标记在任何的类上&#xff0c;用来表明该类是用来执行与数据库相关的操作(即dao对象)&#xff0c;并支持自动处理数据库操作产生的异常 在Spring2.5版本中&#xff0c;引…

3度带6度带中央经线及带号换算问题

前言&#xff1a;3度带6度带中央经线及代号换算问题是比较繁琐的一个问题&#xff0c;不经常用&#xff0c;公式记不住&#xff0c;因此本文特此整理&#xff0c;以备查。 1.基本概况 我国基本比例尺地形图除1&#xff1a;100万采用兰勃特投影&#xff08;lambert&#xff09;外…

信息系统项目管理师0090:项目经理的影响力范围(6项目管理概论—6.3项目经理的角色—6.3.2项目经理的影响力范围)

点击查看专栏目录 文章目录 6.3.2项目经理的影响力范围1.概述2.项目3.组织4.行业5.专业学科6.跨领域6.3.2项目经理的影响力范围 1.概述 项目经理在其影响力范围内可担任多种角色,这些角色反映了项目经理的能力,体现了项目经理的价值和作用,项目经理会涉及项日、组织、行业、…

爬虫案例:股吧,使用Selenium

爬虫案例:股吧,使用Selenium 实用工具关注公众号爬虫探索者获取。 发送对应关键词: 1.运行环境 pip install selenium==4.9.1 pip install pymysql1.1.高版本Chrome问题 针对于高版本的Chrome浏览器 1.2.最终效果 2.目标网站 3.参数介绍 BASE_URL = https://guba.eas…

ppp和ppp mp理论实验

ppp简介 PPP&#xff08;点对点协议&#xff09;为在点对点连接上传输多协议数据包提供了一个标准方法&#xff0c;是数据链路层封装协议的一种方法&#xff0c;支持同步和异步两种传输方式。&#xff08;除了PPP还有HDLC等&#xff0c;不过HDLC只支持同步方式&#xff09; P…

信号与进程(3):信号及其使用

信号及其使用 参考博客 Linux信号的产生和处理 信号及其使用 信号的产生 信号由内核产生&#xff0c;信号的生成与事件的发生相关&#xff0c;事件的发生源有3类&#xff1a; 1、用户 用户在终端上按下某些按键时会产生信号&#xff0c;如**CtrlC产生SIGINT信号&#xff0…

springboot+mp自动生成没有实体类

mybatisX版本冲突问题 一开始我的MyBatisX版本是1.6.1-3,使用mybatis-plus一直不能正常生成实体类 将MyBatisX的版本换成了1.5.7就可以了 MyBatisX版本更换 1.将原有的MyBatisX卸载后重新安装一个新的版本 2.选择一个合适的版本,这里我选的是1.5.7 下载完成后自己选择一个…

【隧道篇 / WAN优化】(7.4) ❀ 02. WAN优化的作用 ❀ FortiGate 防火墙

【简介】看了上一篇文章&#xff0c;相信大家都知道了在防火墙上启动WAN优化的方法&#xff0c;但是WAN优化到底能做什么&#xff1f;相信有很多人想了解。 什么是WAN优化 现在有许多企业通过集中应用程序或在云中提供应用程序来降低成本并整合资源。应用程序在本地局域网内都能…

python多标签图像分类的图片相册共享交流系统vue+django

建立图片共享系统&#xff0c;进一步提高用户对图片共享信息的查询。帮助用户和管理员提高工作效率&#xff0c;实现信息查询的自动化。使用本系统可以轻松快捷的为用户提供他们想要得到的图片共享信息。 根据本系统的基本设计思路&#xff0c;本系统在设计方面前台采用了pytho…

springboot 引入第三方bean

如何进行第三方bean的定义 参数进行自动装配

CH32V 系列 MCU IAP 使用函数形式通过传参形式灵活指定APP跳转地址

参考: CH32V 系列 MCU IAP 升级跳转方法 CH32V103 的 IAP 问题&#xff08;跳转及中断向量表重定位&#xff09; 1. 沁恒的RISC-V内核MCU的IAP跳转示例程序简要分析 沁恒的RISC-V内核的MCU比如CH32V203、CH32V307等系列的EVT包中IAP升级的示例程序中都是通过使能软件中断之后&…

先进制造业数字化转型,为什么基于传统存储无法完成?

本文是 XSKY 智能存储方案助力先进制造数字化转型系列文章中的第一篇&#xff0c;重点分享先进制造行业数字化转型过程中&#xff0c;对于数据存储的需求&#xff0c;以及为何传统存储架构无法很好满足这些需求。 随着智能制造的发展&#xff0c;自动化、信息化、智能化等技术…

linux命令——fdisk分区

在linux中&#xff0c;一切皆文件&#xff0c;硬盘设备在系统中也以文件形式存在&#xff0c;使用fdisk命令可以查看硬盘分区信息 并非硬盘转速越快&#xff0c;文件读取速率越高&#xff0c;有一个文件存储密度的概念

数据合规官认证证书CCRC-DCO使用设计和默认数据保护处理个人数据

快来了解隐私保护工程实践&#xff01;合法原则是关键&#xff0c;一起守护数据安全&#xff01; 隐私保护工程实践需要遵循合法原则&#xff0c;控制者必须确保处理个人数据有明确的法律依据。在设计和默认数据保护中&#xff0c;相关性、差异化、特定目的、必要性和自主权是合…

在ATECLOUD测试平台测试新能源车内连接器

在测试车内连接器的温度时&#xff0c;需要用到直流电源和温度巡检仪&#xff0c;通过温度巡检仪采集连接器工作时的温度。由于用户在测试时会用到多台直流电源和温度巡检仪&#xff0c;并且型号不一样。因此&#xff0c;在用ATECLOUD测试连接器温度时&#xff0c;技术工程师需…