如何使用jq工具或python作为输出编码器将结果转换成json格式是一个困难的问题

2024-10-02 12:31:30 发布

您现在位置:Python中文网/ 问答频道 /正文

例如

你知道吗[根@测试~]#mysql-uroot-p'123123'-e“选择用户、主机”mysql.user用户;“

+-------------------+-----------+
| user              | host      |
+-------------------+-----------+
| root              | %         |
| test              | %         |
| sqlaudit_test_mon | %         |
| sysbase_test      | %         |
| mysql.session     | localhost |
| mysql.sys         | localhost |
+-------------------+-----------+

如何让搜索结果快速转换成json格式,可以用jq工具或者python吗 像这样的

[
        {
                 "user":"root","host":"%"},
        {
                 "user":"test","host":"%"},     
        {
                 "user":"sqlaudit_test_mon","host":"%"},
        {
                 "user":"sysbase_test","host":"%"},
        {
                 "user":"mysql.session","host":"localhost"},
        {
                 "user":"mysql.sys","host":"localhost"}                  
]

我只想知道如何快速将搜索结果转换成json,谢谢! 最好使用jq或python脚本,它可以使我的搜索结果为json格式。你知道吗


Tags: 用户testjsonlocalhosthostsession格式sys
2条回答

只需在SELECT中执行它,而不是将另一个程序拉入管道。MySQL有JSON functions。这里感兴趣的是JSON_ARRAYAGG()JSON_OBJECT()。比如:

SELECT json_arrayagg(json_object('user', user, 'host', host)) FROM mysql.user;

应该这样做,再加上任何需要不打印出的花哨的表ascii艺术。你知道吗

以下是一个全jq解决方案,它假设调用如下:

jq -Rcn -f program.jq sql.txt

请特别注意-R(“原始输入”)和-n选项。你知道吗

def trim: sub(" *$";"") | sub("^ *";"");

# input: an array of values
def objectify($headers):
  . as $in
  | reduce range(0; $headers|length) as $i ({}; .[$headers[$i]] = ($in[$i]) ) ;

def preprocess:
  select( startswith("|") )
  | split("|")
  | .[1:-1]
  | map(trim) ;

reduce (inputs|preprocess) as $in (null;
    if . == null then {header: $in}
    else .header as $h
    | .table += [$in|objectify($h)]
    end )
  | .table

相关问题 更多 >

    热门问题