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

news2024/12/23 13:37:03
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命令,我们可以非常方便的进行配置文件的读取。非常的方便。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在java类前添加上文档注释

第一步&#xff1a; 第二步 第三步 将下面代码粘上 /** *Author Lnn *Date ${DATE}/${TIME} *ClassName ${NAME} *Description */

限量背包问题

问题描述 限量背包问题&#xff1a;从m个物品中挑选出最多v个物品放入容量为n的背包。 问题分析 限量背包问题&#xff0c;可以用来解决许多问题&#xff0c;例如要求从n个物品中挑选出最多v个物品放入容量为m的背包使得背包最后的价值最大&#xff0c;或者总共有多少种放法…

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

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

unity基础(二)

debug方法 Debug.Log(" 一般日志 ");Debug.LogWarning(" 警告日志 ");Debug.LogError(" 错误日志 ");// Player Informationstring strPlayerName "Peter";int iPlayerHpValue 32500;short shPlayerLevel 10;long lAdvantureExp 1…

k8s部署Kubeflow v1.7.0

文章目录 环境介绍部署访问kubeflow ui问题记录 环境介绍 K8S版本&#xff1a;v1.23.17&#xff0c;需要配置默认的sc 参考&#xff1a;https://github.com/kubeflow/manifests/tree/v1.7.0 部署 #获取安装包 wget https://github.com/kubeflow/manifests/archive/refs/tag…

【方法】如何创建RAR格式压缩文件?

为了方便存储或者传输文件&#xff0c;我们经常会把文件打包成不同格式的压缩包&#xff0c;那如果想创建的是RAR格式的压缩包&#xff0c;要如何做呢&#xff1f; RAR是WinRAR软件独有的压缩格式&#xff0c;所以我们可以通过WinRAR软件来创建RAR格式压缩包。下面分享两种创建…

5000亿参数来了:微软将推出 MAI-1 模型硬刚谷歌和OpenAI|TodayAI

美国的科技巨头微软公司&#xff0c;正在积极扩展其人工智能&#xff08;AI&#xff09;技术的领域。最新消息显示&#xff0c;微软将推出一款名为MAI-1的全新AI模型&#xff0c;其规模巨大&#xff0c;预计将拥有5000亿个可调参数。这一开发工作由Inflection AI的CEO穆斯塔法苏…

cmake进阶:变量的作用域说明三(从函数作用域方面)

一. 简介 前一篇文章从函数作用域方面学习了 变量的作用域。文章如下&#xff1a; cmake进阶&#xff1a;变量的作用域说明一&#xff08;从函数作用域方面&#xff09;-CSDN博客cmake进阶&#xff1a;变量的作用域说明二&#xff08;从函数作用域方面&#xff09;-CSDN博客…

在Node.js(express 框架)中使用 JWT 进行身份认证

文章目录 一、JWT 认证机制二、安装 JWT 相关的包三、基本使用1、生成 JWT 字符串2、添加中间件&#xff0c;解析 JWT 字符串3、获取管理员信息(admin) 一、JWT 认证机制 JWT 认证机制&#xff08;图片来源于网络&#xff0c;侵权删除&#xff09;&#xff1a; 关于 JWT 原理可…

Wish、Newegg、Allegro卖家如何做测评补单 快速提升产品权重与销量

大部分主流平台卖家都会使用测评补单来增加产品权重、提高销量。经常会有一些平台的卖家咨询我其他平台能否像亚马逊一样通过测评补单来提升曝光。 其实大部分跨境电商都是可以通过补单来增加店铺权重提升产品排名。其实亚马逊相对来说风控是最严的&#xff0c;风控点多达几十…

Pytorch基础:内置类type的用法

相关阅读 Pythonhttps://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482 在python中&#xff0c;一切数据类型都是对象&#xff08;即类的实例&#xff09;&#xff0c;包括整数、浮点数、字符串、列表、元组、集合、字典、复数、布尔、函数、…

Telnet的三种配置和SSH配置

Telnet的三种配置 实验配置思路&#xff1a; 配置接口IP地址&#xff1a; R1——配置接口IP地址 R2——配置接口IP地址 认证模式为none的配置 R1——认证模式配置为none R2——测试Telnet连接R1设备 认证模式为passwrd的配置 R1——认证模式配置为password R2——测试Telnet连…

C语言例题35、判断一个数是否是回文数

题目要求&#xff1a;输入一个5位数&#xff0c;判断它是不是回文数。即12321是回文数 #include <stdio.h>int main() {int x;int ge, shi, qian, wan;printf("请输入一个5位数&#xff1a;");scanf("%d", &x);ge x % 10; //个sh…

嵌入式硬件中PCB走线与过孔的电流承载能力分析

简介 使用FR4敷铜板PCBA上各个器件之间的电气连接是通过其各层敷着的铜箔走线和过孔来实现的。 由于不同产品、不同模块电流大小不同,为实现各个功能,设计人员需要知道所设计的走线和过孔能否承载相应的电流,以实现产品的功能,防止过流时产品烧毁。 文中介绍设计和测试FR4敷…

图解HTTP(2、简单的 HTTP 协议)

HTTP 协议用于客户端和服务器端之间的通信 请求访问文本或图像等资源的一端称为客户端&#xff0c;而提供资源响应的一端称为服务器端。 通过请求和响应的交换达成通信 请求必定由客户端发出&#xff0c;而服务器端回复响应报文 请求报文是由请求方法、请求 URI、协议版本、…

Baidu Comate 智能编码助手:编程新伙伴,效率新飞跃

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号&#xff1a;网络豆云计算学堂 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a; 网络豆的主页​​​​​ 目录 写在前面 一、Baidu Comate智能编码助手简介…

vue快速入门(五十七) 作用域插槽

注释很详细&#xff0c;直接上代码 上一篇 新增内容 作用域插槽实现表格删除数据 源码 App.vue <template><div id"app"><!-- 向子组件传值 --><MyTable :tableData"tableData"><!-- 接收子组件的传值&#xff0c;默认是对象格…

金三银四面试题(二十四):享元模式知多少?

什么是享元模式 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;旨在通过共享对象来减少内存使用&#xff0c;从而提高性能。它主要用于处理大量细粒度对象的情况&#xff0c;通过将这些对象的可共享部分&#xff08;内部状态&#xff09…

“A”分考试经验分享:云计算HCIE考试请注意这几点...

大家好&#xff0c;我是誉天云计算HCIE的王同学&#xff0c;于4月2日"A"分通过了云计算3.0 HCIE的认证考试。 首先感谢誉天教育对我的辅导&#xff0c;感谢苗苗老师和石老师对我的帮助&#xff0c;通过这次考试让我对华为云计算有了一定的了解。接下来我就与大家分享…

嵌入式C语言教程:实现气压监测系统

气压监测在气象学、航空和户外活动装备中非常重要。本教程将介绍如何在STM32微控制器上使用数字气压传感器实现实时气压监测系统。 一、开发环境准备 硬件要求 微控制器&#xff1a;STM32L476RG&#xff0c;具备低功耗特性和足够的处理能力。开发板&#xff1a;STM32L4 Disc…