首页 > 系统相关 >Shell处理Json数据

Shell处理Json数据

时间:2024-08-12 09:53:56浏览次数:7  
标签:Shell contacts 处理 JSON json jq Json user data

Shell中处理复杂的JSON数据,一般有以下三种方式:

  • jq:jq是一款强大的JSON处理工具,支持过滤、修改、重组和生成JSON数据。
  • Python:使用Python来处理复杂的JSON数据。结合了Shell脚本的便利性和Python处理JSON的强大能力
  • grep/sed/awk:在无其他工具的情况下使用grep/sed/awk等(不推荐)

一、基于 jq 处理 JSON

如果未安装jq,会提示如下错误

-bash: jq: command not found

安装jq

# 官方源中目前没有包含jq,因此需要首先安装epel
yum -y install epel-release

# 安装jq
yum -y install jq

示例数据:JSON文件data.json

{
  "user": {
    "name": "Alice",
    "age": 30,
    "contacts": [
      {"type": "email", "value": "[email protected]"},
      {"type": "phone", "value": "123-456-7890"}
    ]
  }
}
  • 加载并将整个JSON内容以格式化的方式输出
cat data.json | jq '.'
  • 取某个特定的值:name
cat data.json | jq '.user.name'
# 输出 "Alice"

处理数组

  • 获取所有联系人信息,输出每个联系人的信息
cat data.json | jq '.user.contacts[]'
  • 获取所有联系人的值
cat data.json | jq '.user.contacts[].value'

过滤数据

  • 使用select函数来过滤数据:获取所有电子邮件地址
cat data.json | jq '.user.contacts[] | select(.type == "email") | .value'

嵌套数据结构的修改、合并

  • 添加一个新的联系人
cat data.json | jq '.user.contacts += [{"type": "fax", "value": "098-765-4321"}]'
  • 将添加一个新的联系人后的JSON保存到文件
cat data.json | jq '.user.contacts += [{"type": "fax", "value": "098-765-4321"}]' > new_data.json

二、基于Python来处理Json

可以直接在Shell脚本中使用Python-c选项执行一段Python代码来处理JSON数据(示例数据同上)

  • 取某个特定的值:name
cat data.json | python -c 'import json,sys; data=json.load(sys.stdin); print(data["user"]["name"])'
  • 提取第一个联系人的类型
python -c 'import json,sys; data=json.load(sys.stdin); print(data["user"]["contacts"][0]["type"])' < data.json
  • 提取所有联系人的值
python3 -c 'import json,sys; data=json.load(sys.stdin); print([c["value"] for c in data["user"]["contacts"]])' < data.json

将Python代码写入Shell脚本

将Python代码放入一个Shell脚本中,作为脚本的一部分。可以使用Python的全部功能来处理JSON数据

#!/bin/bash

json_file="data.json"

name=$(python3 -c "
import json
with open('$json_file') as f:
    data = json.load(f)
    print(data['user']['name'])
")
echo "Name: $name"

contacts=$(python3 -c "
import json
with open('$json_file') as f:
    data = json.load(f)
    contacts = [c['value'] for c in data['user']['contacts']]
    print(', '.join(contacts))
")
echo "Contacts: $contacts"

三、使用grep、sed、awk、cut 处理Json

这种方式在处理嵌套结构和复杂的数据时会变得非常繁琐且容易出错。

  • 取某个特定的值:name
grep '"name":' data.json | sed 's/.*"name": "\(.*\)",/\1/'
  • 提取所有联系人的值(前提:JSON结构及顺序固定)
grep -o '"value": "[^"]*"' data.json | sed 's/"value": "\(.*\)"/\1/'

使用awk处理JSON

  • 提取age字段
awk -F': ' '/"age"/ {print $2}' data.json | tr -d ','

标签:Shell,contacts,处理,JSON,json,jq,Json,user,data
From: https://blog.csdn.net/promise524/article/details/141039471

相关文章

  • 混合处理框架:Spark
    ApacheFlink是一个开源的流处理框架,用于实现有状态的计算。它能够同时支持批处理和流处理,并且可以无缝地在两者之间切换。Flink的设计目标是提供低延迟、高吞吐量和强大的状态管理能力。以下是Flink的一些关键特性:1.**事件驱动**:Flink是基于事件的流处理引擎,能够实......
  • 混合处理框架:Flink
    ApacheFlink是一个开源的流处理框架,用于实现有状态的计算。它能够同时支持批处理和流处理,并且可以无缝地在两者之间切换。Flink的设计目标是提供低延迟、高吞吐量和强大的状态管理能力。以下是Flink的一些关键特性:1.**事件驱动**:Flink是基于事件的流处理引擎,能够实......
  • 基于Python长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物
    植被是陆地生态系统中最重要的组分之一,也是对气候变化最敏感的组分,其在全球变化过程中起着重要作用,能够指示自然环境中的大气、水、土壤等成分的变化,其年际和季节性变化可以作为地球气候变化的重要指标。此外,由于生态工程保护建设和植被自然生长等因素,中国陆地生态系统发挥了重......
  • 基于MATLAB长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析等领域
    植被是陆地生态系统中最重要的组分之一,也是对气候变化最敏感的组分,其在全球变化过程中起着重要作用,能够指示自然环境中的大气、水、土壤等成分的变化,其年际和季节性变化可以作为地球气候变化的重要指标。此外,由于生态工程保护建设和植被自然生长等因素,中国陆地生态系统发挥了重......
  • 深入解析@JsonValue注解在Java序列化中的应用
    深入解析@JsonValue注解在Java序列化中的应用在Java开发中,对象序列化是一个常见的需求,尤其是在进行网络通信或者数据持久化时。Jackson库作为Java领域内一个非常流行的JSON处理库,提供了强大的序列化和反序列化功能。在Jackson2.9版本之后,@JsonValue注解的引入,为开发者提供......
  • Redis实际项目中涉及缓存一致性的处理
    在实际项目中,Redis缓存一致性是一个关键问题,尤其是在分布式系统中。缓存一致性指的是确保缓存中的数据与实际数据库中的数据保持同步。以下是一些在实际项目中处理Redis缓存一致性的方法和最佳实践:1.缓存失效策略a.TTL(TimetoLive):设置缓存的过期时间。当数据过期后,缓存会自......
  • 图像数据处理1
    一、图像数据的表示与基本运算1.1图像文件的读写与显示1.1.1OpenCV读写与显示图像文件①彩色图像转为灰度图像importcv2ascvimportsysimportos#从当前工作目录下读入一幅彩色图像img_path='E:\PyCharmCommunityEdition2024.1.1\image\slpn.jpg'#此处为绝对......
  • 人工智能算法工程师(高级)课程11-自然语言处理之NLP的语言模型-seq2seq模型,seq+注意
    大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(高级)课程11-自然语言处理之NLP的语言模型-seq2seq模型,seq+注意力,word2vec与代码详解。本课程面向高级人工智能算法工程师,深入讲解自然语言处理(NLP)中的关键语言模型技术,包括seq2seq模型及其增强版加入注意力机制......
  • 【待做】【免杀对抗】怎样实现一个基础的shellcodeloader
    一、SHELLCODE二、API调用隐藏2.1执行API2.2隐藏IAT调用API2.3Syscall三、AntiSandBox四、反调试4.1检测进程4.2LLVM五、免杀PE文件在越来越多的攻防演练项目中,上线机器至C2(Command&Control)以及钓鱼打开内网入口点都需对其所使用的落地文件......
  • 【数据分析---- Pandas进阶指南:核心计算方法、缺失值处理及数据类型管理】
    前言:......