Formatage des chaînes json sous linux, résolution des caractères chinois tronqués json.tool

avant-propos

Environnement : centos7.9
dans le cas d'un réseau externe, si les données ne sont pas strictement confidentielles, la https://www.sojson.com/chaîne json peut être formatée via le site Web d'analyse json en ligne. Cet article explique comment utiliser les commandes pour formater les chaînes json dans l'environnement Linux.

L'outil json.tool de Python

#先创建一个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 ~]# 

Résoudre les caractères chinois tronqués de json.tool

Modifiez le programme json.tool, qui existe dans json/tool.py sous le chemin d'installation de la bibliothèque système python,
ajoutez le paramètre Ensure_ascii=False dans la méthode json.dump, c'est-à-dire que le programme json.tool ne garantit pas avec force que le contenu de json est échappé à l'encodage ascii, et la sortie chinoise peut être sortie telle quelle.

[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": "新疆"
        }
    ]
}

jqtools

L'outil jq est également un outil de ligne de commande très utile pour le formatage json. Le paquet jq n'existe pas dans l'entrepôt miroir centos par défaut, donc la source epel doit être installée.

[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 ~]# 

syntaxe de la commande 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;

Résumer

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 .					#与上面命令等价,有个点.号

Je suppose que tu aimes

Origine blog.csdn.net/MssGuo/article/details/131675011
conseillé
Classement