linux下json字符串格式化、解决json.tool中文乱码

这篇具有很好参考价值的文章主要介绍了linux下json字符串格式化、解决json.tool中文乱码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

环境:centos7.9
在有外网的情况下,如果对数据没有严格的保密,那么可以通过在线json解析网站https://www.sojson.com/对json字符串进行格式化。本篇讲如何在Linux环境下使用命令对json字符串进行格式化。

python的json.tool工具

#先创建一个json格式的文件,如下
#json字符串都是一行,可读性差,需要格式化
[root@master ~]# cat python.py
{"name": "中国","province": [{"name": "黑龙江","cities": {"city": ["哈尔滨", "大庆"]}}, {"name": "广东","cities": {"city": ["广州", "深圳", "珠海"]}}, {"name": "台湾","cities": {"city": ["台北", "高雄"]}}, {"name": "新疆","cities": {"city": ["乌鲁木齐"]}}]}

#使用python 的json.tool模块工具对json字符串格式化
#虽然能正常格式化,但中文乱码了
[root@master ~]#  python -m json.tool python.py 			#与下面这条命令等价
[root@master ~]# cat python.py | python -m json.tool		#与上面这条命令等价
{
    "name": "\u4e2d\u56fd",
    "province": [
        {
            "cities": {
                "city": [
                    "\u54c8\u5c14\u6ee8",		#中文乱码了
                    "\u5927\u5e86"
                ]
            },
            "name": "\u9ed1\u9f99\u6c5f"
        },
        {
            "cities": {
                "city": [
                    "\u5e7f\u5dde",
                    "\u6df1\u5733",
                    "\u73e0\u6d77"
                ]
            },
            "name": "\u5e7f\u4e1c"
        },
        {
            "cities": {
                "city": [
                    "\u53f0\u5317",
                    "\u9ad8\u96c4"
                ]
            },
            "name": "\u53f0\u6e7e"
        },
        {
            "cities": {
                "city": [
                    "\u4e4c\u9c81\u6728\u9f50"
                ]
            },
            "name": "\u65b0\u7586"
        }
    ]
}
[root@master ~]# 

解决json.tool中文乱码

修改json.tool程序,该程序存在于python系统库安装路径下的json/tool.py,
json.dump方法中增加参数ensure_ascii=False,即让json.tool程序不强行保证json的内容都转义为ascii编码,中文原样输出即可。

[root@master ~]# find / -name tool.py
/usr/lib64/python2.7/json/tool.py
[root@master ~]# vim /usr/lib64/python2.7/json/tool.py		#修改tool.py文件,修改完成保存退出即可
 31         except ValueError, e:
 32             raise SystemExit(e)
 33     with outfile:
 34         json.dump(obj, outfile, sort_keys=True,
 35                   indent=4,ensure_ascii=False,separators=(',', ': '))	#添加ensure_ascii=False
 36         outfile.write('\n')

[root@master ~]# cat python.py | python -m json.tool				#验证,中文正常
{
    "name": "中国",
    "province": [
        {
            "cities": {
                "city": [
                    "哈尔滨",
                    "大庆"
                ]
            },
            "name": "黑龙江"
        },
        {
            "cities": {
                "city": [
                    "广州",
                    "深圳",
                    "珠海"
                ]
            },
            "name": "广东"
        },
        {
            "cities": {
                "city": [
                    "台北",
                    "高雄"
                ]
            },
            "name": "台湾"
        },
        {
            "cities": {
                "city": [
                    "乌鲁木齐"
                ]
            },
            "name": "新疆"
        }
    ]
}

jq工具

jq工具也是一个很好用的json格式化命令行工具。jq包默认不存在centos镜像仓库中,所以需要安装epel源。文章来源地址https://www.toymoban.com/news/detail-553612.html

[root@master ~]# yum -y install epel-release
[root@master ~]# yum install  jq -y
[root@master ~]# jq . python.py				#与下面命令等价,有个点.号
[root@master ~]# cat python.py | jq .		#与上面命令等价,有个点.号
{
  "name": "中国",
  "province": [
    {
      "name": "黑龙江",
      "cities": {
        "city": [
          "哈尔滨",
          "大庆"
        ]
      }
    },
    {
      "name": "广东",
      "cities": {
        "city": [
          "广州",
          "深圳",
          "珠海"
        ]
      }
    },
    {
      "name": "台湾",
      "cities": {
        "city": [
          "台北",
          "高雄"
        ]
      }
    },
    {
      "name": "新疆",
      "cities": {
        "city": [
          "乌鲁木齐"
        ]
      }
    }
  ]
}
[root@master ~]# 

jq命令语法

Usage:	jq [options] <jq filter> [file...]
	jq [options] --args <jq filter> [strings...]
	jq [options] --jsonargs <jq filter> [JSON_TEXTS...]

jq是一个处理JSON字符串的工具,将给定的JSON字符串输入经过过滤器过滤后并以JSON形式生成输出结果
最简单的过滤器是点.,它将jq的输入复制到它的输出且未经修改(除了格式)。
常用options:
 -c      紧凑输出为一行,未格式化;
 -n               use `null` as the single input value;
 -e               set the exit status code based on the output;
 -s               read (slurp) all inputs into an array; apply filter to it;
 -r               output raw strings, not JSON texts;
 -R               read raw strings, not JSON texts;
 -C               colorize JSON;
 -M               monochrome (don't colorize JSON);
 -S               sort keys of objects on output;
 --tab            use tabs for indentation;
 --arg a v        set variable $a to value <v>;
 --argjson a v    set variable $a to JSON value <v>;
 --slurpfile a f  set variable $a to an array of JSON texts read from <f>;
 --rawfile a f    set variable $a to a string consisting of the contents of <f>;
 --args           remaining arguments are string arguments, not files;
 --jsonargs       remaining arguments are JSON arguments, not files;
 --               terminates argument processing;

总结

1、Python命令对json字符串进行格式化
python -m json.tool python.py 			#与下面这条命令等价
cat python.py | python -m json.tool		#与上面这条命令等价

2、jq命令对json字符串进行格式化
yum -y install epel-release				#要安装epel源
yum install  jq -y						#安装jq命令
jq . python.py							#与下面命令等价,有个点.号
cat python.py | jq .					#与上面命令等价,有个点.号

到了这里,关于linux下json字符串格式化、解决json.tool中文乱码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python 的字符串格式化指南

    Python 中控制字符串格式通常有三种形式: % 占位符(格式化符) str.format() 函数 f-string 内嵌式 Python 最先开始格式化字符串是用 %,但它的致命缺点是支持的类型有限制,只支持 int,str,double 这三种类型,从而导致其他所有类型只能转换(强制转换)为这几个类型,还有如果

    2024年02月08日
    浏览(54)
  • 第33讲:Python格式化字符串时使用字典传递字符串

    在前面对字符串进行格式化输出时,传递被格式化的字符串时都是单个的,如果想要对字典中Key对应的Value进行格式化输出,常规的方法如下:

    2023年04月24日
    浏览(52)
  • 格式化字符串你都懂了吗

    今天跟大家聊聊字 符串的格式化 这部分内容。乍一听“ 格式化 ”这三个字,有的初学者可能会懵:难道这是要清空字符串的节奏? 其实不是的,恰恰相反,格式化字符串是为了让字符串变的更美观、更灵活。接下来就给大家详细介绍格式化字符串的概念以及具体用法。 格

    2024年02月04日
    浏览(51)
  • 浅谈非栈上格式化字符串

    这里先浅分析修改返回地址的两种打法,分别是\\\"诸葛连弩\\\"和”四马分肥“ 本文例题 以陕西省赛easy_printf为主 简单看一看程序 需要先过一个判断然后进入vuln 进入后 有一个13次的循环 可以让我们操作 第一步 肯定要先leak出栈地址 程序基地址和libc基地址 第二步 修改ret地址

    2024年02月14日
    浏览(50)
  • Python字符串格式化 (%操作符)

    在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输入输出。在Python中内置有对字符串进行格式化的操作符是\\\"%\\\"。 模板 格式化字符串时,Python使用一个字符串作为模板。模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的

    2024年02月14日
    浏览(47)
  • Python 用户输入和字符串格式化指南

    Python 允许用户输入数据。这意味着我们可以向用户询问输入。在 Python 3.6 中,使用 input() 方法来获取用户输入。在 Python 2.7 中,使用 raw_input() 方法来获取用户输入。以下示例要求用户输入用户名,并在输入用户名后将其打印在屏幕上: Python 3.6: Python 2.7: 为了确保字符串按预

    2024年02月05日
    浏览(77)
  • 格式化字符串走过的坑 pwn109

    格式化字符串走过的坑 pwn109 今天做的一道题有一个坑我调试半天终于打通了,格式化字符串的坑,确实不少,东西也比较多容易忘记,怎么说呢,功夫在平时,经验少了 老规矩先看一下保护 Full RELRO意味着got不能修改也就是不能通过格式化字符串漏洞来改got表,但是nx保护关

    2024年04月08日
    浏览(59)
  • 【Python入门篇】——Python基础语法(字符串格式化,表达式格式化和数据输入)

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句,Python函数,Python的数据容器等。 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 目前通过%符号占位

    2024年02月05日
    浏览(56)
  • Godot 4 源码分析 - 增加格式化字符串功能

    Godot 4的主要字符串类型为String,已经设计得比较完善了,但有一个问题,格式化这块没怎么考虑。 String中有一个format函数,但这个函数只有两个参数,这咋用? 查找使用例子,都是这种效果 一看就懵。哪里有之前用的带%s %d...之类的格式化用得舒服。 动手实现一个 提供s

    2024年02月14日
    浏览(44)
  • 9.Python从入门到精通—Python 字符串格式化,三引号,Unicode 字符串

    Python中的字符串格式化是指将一个字符串中的占位符替换为指定的值。Python中有多种字符串格式化的方法,以下是其中的几种常见方法: 使用百分号(%)进行字符串格式化 使用百分号(%)进行字符串格式化是Python中最早的字符串格式化方法。它的基本语法如下: 其中,格

    2024年03月20日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包