LINUX.ORG.RU

Работа с БД (передача значений в json)

 ,


0

1

Всем привет. Есть скрипт, который запрашивает информацию о пользователе в БД:

mysql -u $usr -p$pas &db -N -e "select phone, FName, SName from $tb where login = 'ivanov')";

для примера мы получаю из БД:

+---------+--------+-------+----------+--------------+ 
| user_id | login  | phone | FName    | SName        | 
+---------+--------+-------+----------+--------------+ 
|       1 | ivanov |  3123 | ivan     | ivanov       |
+---------+--------+-------+----------+--------------+

Нужно замапить phone, FName, SName в json:

"user_info": { 
    "givenname": "FName", 
    "phone": "phone", 
    "surname": "SName", 
}

пока что пришел только к такому формату:

FName=$(mysql -u $usr -p$pas &db -N -e "select FName from $tb where login = 'ivanov')";
phone=$(mysql -u $usr -p$pas &db -N -e "select phone from $tb where login = 'ivanov')";
SName=$(mysql -u $usr -p$pas &db -N -e "select SName from $tb where login = 'ivanov')";

echo "\"user_info\": { 
    \"givenname\": \"$FName\", 
    \"phone\": \"$phone\", 
    \"surname\": \"$SName\"
}"

Как это можно оптимизировать? Читал что можно передавать в массив а потом вычитывать оттуда но не вижу в этом смысла.. Буду рад помощи.



Последнее исправление: saymyname (всего исправлений: 1)

echo "\"user_info\": { 
    \"givenname\": \"$FName\", 
    \"phone\": \"$phone\", 
    \"surname\": \"$SName\"
}"

man jq

seras
()

Каждый раз, когда тебе хочется написать что-то на шелле, ударь себя по рукам и пиши на нормальном скриптовом языке

Ну серьезно, правильно советуют выше, ведь наверняка захочется больше логики накрутить на это безобразие, а это будет та еще боль. Ты ведь уже ощущаешь, что надо делать не так.

EugeneBas ★★
()

mysql (консольный клиент) умеет выводить результаты в XML формате

возможно в последних версиях туда даже json могли добавить, почитай маны

Harald ★★★★★
()

MariaDB 10.2+ и Oracle MySQL 5.7+ позволяют делать так:

> SELECT JSON_OBJECT('givenname', FName, 'phone', phone, 'surname', SName) FROM user WHERE login = 'ivanov';
{"givenname": "ivan", "phone": 3123, "surname": "ivanov"}
Darth_Revan ★★★★★
()
Последнее исправление: Darth_Revan (всего исправлений: 3)
Ответ на: комментарий от iZEN

Вместо Bash - Vala.

Вместо «соли для ванн» употреблять всё же лучше пищевую.

// мимо наслаждающийся сильными сторонами и Bash, и Vala

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.