使用脚本以可读的 JSON 格式显示 curl 命令输出

news2024/11/23 17:25:49

在我们经常调试微服务或者使用 Elasticsearch API 时,经常会使用curl 来进行调试。但是有时我们的输出不尽如意。显示的不是一 pretty 格式进行输出的。我们有时还必须借助于其他的一些网站工具,比如 Best JSON Formatter and JSON Validator: Online JSON Formatter  或者 JSON Formatter & Validator 来帮我来验证。

在 Elasticsearch 的输出中经常我们会看到如下格式的命令:

curl -k -u elastic:gV4pgxNCTi5y*80GmoqN https://localhost:9200?pretty=true

这里的 pretty 就是要求我们要以 JSON 的格式来进行显示。尽管我们上面的命令可以省去 pretty=true 这个选项,可以还是可以得到漂亮的输出:

curl -k -u elastic:gV4pgxNCTi5y*80GmoqN https://localhost:9200
{
  "name" : "liuxgm.local",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "xz4jLE_USfmbvkSyvG138w",
  "version" : {
    "number" : "8.6.1",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "180c9830da956993e59e2cd70eb32b5e383ea42c",
    "build_date" : "2023-01-24T21:35:11.506992272Z",
    "build_snapshot" : false,
    "lucene_version" : "9.4.2",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

我们可以看如下的命令的输出:

curl -k  https://localhost:9200?pretty=true
curl -k  https://localhost:9200?pretty=true
{
  "error" : {
    "root_cause" : [
      {
        "type" : "security_exception",
        "reason" : "missing authentication credentials for REST request [/?pretty=true]",
        "header" : {
          "WWW-Authenticate" : [
            "Basic realm=\"security\" charset=\"UTF-8\"",
            "Bearer realm=\"security\"",
            "ApiKey"
          ]
        }
      }
    ],
    "type" : "security_exception",
    "reason" : "missing authentication credentials for REST request [/?pretty=true]",
    "header" : {
      "WWW-Authenticate" : [
        "Basic realm=\"security\" charset=\"UTF-8\"",
        "Bearer realm=\"security\"",
        "ApiKey"
      ]
    }
  },
  "status" : 401
}

我们可以看到很漂亮的输出。一旦我们省去 pretty=true 这个选项,那么我们看看输出的结果是什么:

$ curl -k  https://localhost:9200
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":["Basic realm=\"security\" charset=\"UTF-8\"","Bearer realm=\"security\"","ApiKey"]}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":["Basic realm=\"security\" charset=\"UTF-8\"","Bearer realm=\"security\"","ApiKey"]}},"status":401}$

很显然,我们的显示非常不漂亮,很难看懂它的意思。

在 Elasticsearch 中,我们的很多命令都可以使用 pretty=true 选项来变得更加美观。

但是在实际的用例中,有很多并不像 Elasticsearch 那样。它们的命令中并没有像 Elasticsearch 那样提供 pretty=true 这样的选项。那么我们该怎么办呢?

在下面,我来介绍几种方案:

使用 json_pp

我们尝试使用如下的命令:

echo '{"type":"Bar","id":"1","title":"Foo"}' | json_pp -json_opt pretty,canonical
$ echo '{"type":"Bar","id":"1","title":"Foo"}' | json_pp -json_opt pretty,canonical
{
   "id" : "1",
   "title" : "Foo",
   "type" : "Bar"
}

很显然,它能帮我们把 JSON 的输出变得很漂亮。我们来尝试一下上面的 Elasticsearch 访问:

$ curl -k  https://localhost:9200 | json_pp -json_opt pretty,canonical
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   459  100   459    0     0  29436      0 --:--:-- --:--:-- --:--:-- 38250
{
   "error" : {
      "header" : {
         "WWW-Authenticate" : [
            "Basic realm=\"security\" charset=\"UTF-8\"",
            "Bearer realm=\"security\"",
            "ApiKey"
         ]
      },
      "reason" : "missing authentication credentials for REST request [/]",
      "root_cause" : [
         {
            "header" : {
               "WWW-Authenticate" : [
                  "Basic realm=\"security\" charset=\"UTF-8\"",
                  "Bearer realm=\"security\"",
                  "ApiKey"
               ]
            },
            "reason" : "missing authentication credentials for REST request [/]",
            "type" : "security_exception"
         }
      ],
      "type" : "security_exception"
   },
   "status" : 401
}

很显然,它也工作正常。

使用 jq

我们需要单独安装 jq。我们使用如下的命令来进行验证:

echo '{"type":"Bar","id":"1","title":"Foo"}' | jq '.'
$ echo '{"type":"Bar","id":"1","title":"Foo"}' | jq '.'
{
  "type": "Bar",
  "id": "1",
  "title": "Foo"
}

显然这种方法比上面的方法更为简洁。我们也可以使用它来试一下 Elasticsearch 的访问:

curl -k  https://localhost:9200 | jq '.'

它还有彩色的输出。显得非常漂亮。

 

使用 python

我们使用如下的例子来进行展示:

echo '{"type":"Bar","id":"1","title":"Foo"}' | python -m json.tool
$ echo '{"type":"Bar","id":"1","title":"Foo"}' | python -m json.tool
{
    "type": "Bar",
    "id": "1",
    "title": "Foo"
}

尝试一下 Elasticsearch API:

它和 jq 输出的结果很相似,除了没有彩色的显示。

我们还可以使用 curljson 命令:

pip install curljson
 curljson -k https://localhost:9200
{
    "error": {
        "header": {
            "WWW-Authenticate": [
                "Basic realm=\"security\" charset=\"UTF-8\"",
                "Bearer realm=\"security\"",
                "ApiKey"
            ]
        },
        "reason": "missing authentication credentials for REST request [/]",
        "root_cause": [
            {
                "header": {
                    "WWW-Authenticate": [
                        "Basic realm=\"security\" charset=\"UTF-8\"",
                        "Bearer realm=\"security\"",
                        "ApiKey"
                    ]
                },
                "reason": "missing authentication credentials for REST request [/]",
                "type": "security_exception"
            }
        ],
        "type": "security_exception"
    },
    "status": 401
}

使用 Nodejs

echo '{"type":"Bar","id":"1","title":"Foo"}' | node -e "console.log( JSON.stringify( JSON.parse(require('fs').readFileSync(0) ), 0, 1 ))"
$ echo '{"type":"Bar","id":"1","title":"Foo"}' | node -e "console.log( JSON.stringify( JSON.parse(require('fs').readFileSync(0) ), 0, 1 ))"
{
 "type": "Bar",
 "id": "1",
 "title": "Foo"
}

很显然这种方法非常笨拙。你也可以采用如下的方法:

echo '{"foo": "lorem", "bar": "ipsum"}' | npx json
echo '{"foo": "lorem", "bar": "ipsum"}' | npx json
{
  "foo": "lorem",
  "bar": "ipsum"
}

使用 json_reformat

在 Linux 机器上安装 yajl-tools 安装包,然后使用如下的命令:

echo '{"foo": "lorem", "bar": "ipsum"}' | json_reformat
{
    "foo": "lorem",
    "bar": "ipsum"
}

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

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

相关文章

叮!一大波来自客户的感谢信

春风渐暖,美好如期,祝福的话语在日子的酝酿里更值得期待。神策数据走过 7 载春秋,描绘的大数据分析和营销科技图景在时间的打磨下清晰可见。时光沉淀经验,匠心兑换卓越,这条终点叫做「帮助中国三千万企业重构数据根基&…

类与对象(上)

类与对象(上) 1.面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间…

vite从零创建react-ts项目

1.创建vite-react-ts文件夹,初始化项目 npm init 初始化后可以看到包管理文件package.json 2.项目结构 根目录下新建index.html模板文件。以往都是放在public文件夹的,但是官方推荐放在根目录。这是有意而为之的:在开发期间 Vite 是一个服…

qt之条形码与二维码的生成

一、简介 条形码: 条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排…

探讨接口测试以及其用例设计方法

接口测试的总结文档 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做和如何做?并没有解释为什么要做? 第二部分:主要介绍为什…

数据结构:带环单链表基础OJ练习笔记(leetcode142. 环形链表 II)(leetcode三题大串烧)

目录 一.前言 二.leetcode160. 相交链表 1.问题描述 2.问题分析与求解 三.leetcode141. 环形链表 1.问题描述 2.代码思路 3.证明分析 下一题会用到的重要小结论: 四.leetcode142. 环形链表 II 1.问题描述 2.问题分析与求解 Judgecycle接口&#xf…

婴儿监视器美国亚马逊CPC认证ASTM F2951标准要求?

婴儿监视器,又称婴儿监听器、婴儿监护器,英文名为( baby monitor其主要用于用于居家和婴儿的监听和护理。欧美市场上广泛使用,已经存在30年历史的 Baby Monitor是采用现代无线电技术应用于居家和婴儿的监听和护理的好帮手。婴儿监护器由看器(…

基于Jeecgboot前后端分离的ERP系统开发系列--出库单(1)

这次从出库单开始进行整个单据录入显示的模板,不再采用默认的online表单代码生成的方式,以满足实际的业务需要,当然刚开始做,以后还需要进行改进。 一、首先单号生成 采用系统开发里的代码编码规则,相应的修改增加代码…

7、MyBatis框架——MyBatis对一对一关系的处理、分步查询、MyBatis对一对多关系的处理

目录 一、项目框架搭建 二、在实体类中添加额外属性实现多表查询 1、mybatis两表关联查询 (1)实体类类型映射规则 (2)代码演示 2、分步查询 (1)autoMapping开启自动映射 (2)…

Python-正则表达式详解-快速掌握正则表达式核心函数

正则表达式为为高级的文本模式匹配、抽取或文本形式的搜索和替换功能提供了基础。本文主要介绍python正则表达式的一些基础功能,掌握它也可以使得在python编程中处理字符串游刃有余。1.简介正则表达式是一些由字符和特殊符号组成的字符串,匹配一系列有相…

Ansible的安装及部署

目录 一、Ansible对于企业运维的重大意义 二、Ansible的安装 三、构建Ansible清单 1.直接书写受管主机名或ip,每行一个 2.设定受管主机的组[组名称] 四、Ansible配置文件参数详解 1、配置文件的分类与优先级 2.配置新用户的Ansible配置 3.生成免密认证 本章…

算法 ——世界 二

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。个人爱好: 编程,打篮球,计算机知识个人名言:海不辞水,故能成其大;山不辞石…

Linux管道选取命令:cut、grep

选取命令就是将一段数据经过分析后,取出我们所想要的,或是经历分析关键词,取得我们所想要的那一行 一般来说,选取信息通常是针对一行一行来分析的,而不是整篇信息分析 下面介绍两个很常用的信息选取命令:…

Numpy基础与实例——人工智能基础——机器学习

文章目录一、Numpy概述1. 优势2. numpy历史3. Numpy的核心:多维数组4. 内存中的ndarray对象4.1 元数据(metadata)4.2 实际数据二、numpy基础1. ndarray数组2. arange、zeros、ones、zeros_like3. ndarray对象属性的基本操作3.1 修改数组维度3…

dubbo接口自动化用例性能优化

dubbo接口自动化用例性能优化 目录:导读 前言 优化本地调试时间 单用例执行时间的优化 提高并发 最后 前言 去年换了一个新部门,看了下当前的自动化用例的情况,发现存在三类性能问题: 本地调试运行时等待时间较长&#xf…

C++学习记录——팔 内存管理

文章目录1、动态内存管理2、内存管理方式operator new operator delete3、new和delete的实现原理1、动态内存管理 C兼容C语言关于内存分配的语法,而添加了C独有的东西。 //int* p1 (int*)malloc(sizeof(int));int* p1 new int;new是一个操作符,C不再需…

【工具】图片和PDF批量区域OCR识别图片文字并重命名,如何批量图片识别文字并将识别的文字改名该图片

前段时间接到一个棘手的难题(识别图片文字,将图片文件名改成该文字) 因为不解决就得手动挨个挨个输入然后把文件命名好 今天又一个文件需求是这样的 图上有姓名文字,要识别出来改成每一张图跟这个一样,有的人说了缩…

学习笔记——吴恩达《神经网络与深度学习》

神经网络与深度学习1. 基础知识神经网络用神经网络进行监督学习2. 神经网络基础知识二分分类logistic回归logistic回归损失函数梯度下降法导数计算图logistic回归中的梯度下降法m个样本的梯度下降向量化Python中的广播3. 浅层神经网络神经网络概述神经网络表示计算神经网络的输…

Android自动化测试——Monkey

本来是做Web后端的,来公司实习变成微信小程序前端了,到这周变成Android APP测试人员了,也是微醺啊。 由于对手工测试终究是有些抵触,所有昨天小试了一下不用写代码的自动化压力测试,在此记下我的心得。 一、Monkey与…

TOOM互联网舆情监测中心,互联网舆情监测系统为何出现以及由来?

互联网舆情监测中心是指负责收集、分析和评估互联网上的舆情信息的组织或机构,旨在帮助政府、企业、媒体和其他相关组织了解公众对特定话题的看法、情感和态度,并采取相应的措施应对和管理舆情事件,TOOM互联网舆情监测中心,互联网…