Как использовать инструменты JQ или Python в качестве выходного кодера, чтобы сделать результат для перевода в JSON Formot является сложным вопросом - PullRequest
0 голосов
/ 25 февраля 2019

для примера

[root @ test ~] # 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.

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Вот решение all-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
0 голосов
/ 25 февраля 2019

Просто сделайте это в вашем SELECT вместо того, чтобы вставлять другую программу в конвейер.MySQL имеет JSON-функций .Здесь интерес представляют JSON_ARRAYAGG() и JSON_OBJECT().Что-то вроде:

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

должно сделать это, плюс все, что нужно, чтобы не распечатывать этот модный стол ascii art.

...