Ответ 1
Перенести результаты из файла в инструмент python json 2.6 и далее
cat 'file_name' | python -m json.tool
У меня есть файл с последовательностью элемента JSON:
{ element0: "lorem", value0: "ipsum" }
{ element1: "lorem", value0: "ipsum" }
...
{ elementN: "lorem", value0: "ipsum" }
Существует ли сценарий оболочки для форматирования JSON для отображения содержимого файла в читаемой форме?
Я видел этот пост, и я думаю, что это хорошая отправная точка!
Моя идея состоит в том, чтобы перебрать строки в файле, а затем:
while read row; do echo ${row} | python -mjson.tool; done < "file_name"
У кого-нибудь есть другие идеи?
Перенести результаты из файла в инструмент python json 2.6 и далее
cat 'file_name' | python -m json.tool
Вы можете использовать инструмент Python JSON (требуется Python 2. 6+).
Например:
echo '{ "element0" : "lorem", "element1" : "ipsum" }' | python -m json.tool
Который даст вам:
{
"element0": "lorem",
"element1": "ipsum"
}
Я чувствовал, что это заслуживает отдельной записи, когда это заняло у меня больше времени, чем нужно было обнаружить. Я искал простой способ красиво распечатать вывод json docker inspect -f
. Это было кратко упомянуто выше Нуфалом Ибрагимом как часть другого ответа.
С веб-сайта JQ (https://stedolan.github.io/jq/):
jq похож на sed для данных JSON - вы можете использовать его для нарезки, фильтрации, отображения и преобразования структурированных данных с той же легкостью, с которой sed, awk, grep и friends позволяют вам играть с текстом.
По умолчанию он обеспечивает цветной вывод, и вам просто нужно перенаправить на jq
, например,
cat file | jq .
Пример:
Пигментирование является убийственным инструментом. Видеть это. Я объединяю python json.tool с пигментированием
echo '{"foo": "bar"}' | python -m json.tool | pygmentize -g
Для других подобных инструментов и инструкции по установке см. Ответ, связанный выше.
Вот живая демонстрация:
Есть их куча. У меня лично есть этот псевдоним в моем .zshrc
pjson () {
~/bin/pjson.py | less -X
}
где pjson.py
есть
#!/usr/bin/env python
import json
import sys
try:
input_str = sys.stdin.read()
print json.dumps(json.loads(input_str), sort_keys = True, indent = 2)
except ValueError,e:
print "Couldn't decode \n %s \n Error : %s"%(input_str, str(e))
Позволяет мне использовать это в командной строке как канал (что-то вроде curl http://.... | pjson
).
OTOH, Пользовательский код является обязательством, поэтому jq, который для меня похож на золотой стандарт. Он написан на C (и, следовательно, переносится без зависимостей, таких как Python или Node), делает гораздо больше, чем просто красивую печать и быстро.
Вы можете использовать пакет jq
, который может быть установлен во всех системах Linux. Установите инструмент, используя следующие команды.
# Redhat based systems(Centos)
yum install -y epel-release
yum install -y jq
# Debian based systems
apt install -y jq
После этого вы сможете передавать потоки текста в инструмент jq.
echo '{"test":"value", "test2":"value2"}' | jq
Надеюсь, этот ответ поможет.
В Mac OS установите jq
с помощью команды
$ brew install jq
Вы можете получить красивую печать JSON так же, как,
$ curl -X GET http://localhost:8080/api/v1/appointments/1 | jq
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 117 0 117 0 0 8404 0 --:--:-- --:--:-- --:--:-- 9000
{
"craeted_at": "10:24:38",
"appointment_date": "2019-02-08",
"name_of_doctor": "Monika",
"status": true,
"price": 12.5,
"id": 1
}
Решение Shawn, но для Python 3:
echo '{"foo": "bar"}' | python3 -m json.tool
Для форматирования вашего JSON с правильным отступом используйте JSON.stringify
console.log(JSON.stringify(your_object, null, 2)); // prints in b/w
Но чтобы сделать его красивее, добавив цвета, вы можете проверить мою посылку beautify-json
JSONПример:
const { jsonBeautify } = require('beautify-json')
let your_object = {
name: 'Nikhil',
age: 22,
isMarried: false,
girlfriends: null,
interestedIn: [
'javascript',
'reactjs',
'nodejs'
]
}
jsonBeautify(your_object) // It will beautify your object with colors and proper indentation and display it on the terminal
Выход: