Как сделать отступ для данных JSON внутри TextMate, Emacs, BBEdit или Sublime Text 2?
[Обновление: через 8 часов после того, как этот вопрос был опубликован, автор пакета JSON был уведомлен об этой проблеме и исправил ее.]
У меня есть следующие данные JSON в файле application.json
, показанный в конце этого поста, и я использовал TextMate с пакетом JSON, Emacs, BBEdit и Sublime Text 2, чтобы правильно сделать отступ, но все, похоже, не могли.
И TextMate, и Sublime Text 2 настаивали на том, чтобы первый {
не должно быть отступ, и первая серьезная проблема заключалась в закрывающей скобке для "child": {
, И TextMate, и Sublime Text 2 отказались выравнивать }
под левой стороной "child": {
, Emacs продолжал делать отступы все дальше и дальше для каждой строки, а BBEdit, похоже, вообще не имел функции повторного отступа (может ли это быть?).
Есть ли способ правильно сделать отступ для файла, или TextMate и Sublime Text 2 делают правильные вещи для данных JSON?
[
{
"settings": [ "master" ],
"appPort": "8666",
"specs": {
"frame" : {
"type" : "HTMLFrameMojit",
"config": {
"deploy": true,
"child": {
"type" : "HelloWorldMojit"
},
"assets": {
"top": {
"css": [
"/static/HelloWorldMojit/assets/index.css"
]
}
}
}
}
}
},
{
"settings": [ "environment:development" ],
"staticHandling": {
"forceUpdate": true
}
}
]
9 ответов
Я только что исправил эту проблему в пакете, для пользователей 2.0 пакет должен обновляться в течение 24 часов с исправлением.
Я нашел решение для BBEdit, которое легко и хорошо работает.
Поместите следующий скрипт в~/Library/Application Support/BBEdit/Text Filters/FormatJSON.sh
#!/bin/bash
python -m json.tool
- Откройте файл JSON в BBEdit. Нет необходимости перезагружать BBEdit, потому что BBEdit качается!
- Выберите " Текст"> "Применить текстовый фильтр"> "Формат JSON".
Я проверил это с помощью файла JSON, содержащего 3 612 683 символа в одной строке. BBEdit открыл этот файл и переформатировал, не показывая SPOD.
В BBEdit 14.0 и более поздних версиях пункт «Переформатировать документ» в текстовом меню изменит форматирование JSON. Вы также можете использовать встроенную поддержку языкового сервера с языковым сервером JSON, который поддерживает переформатирование.
Этот ответ похож на: /questions/548846/kak-sdelat-otstup-dlya-dannyih-json-vnutri-textmate-emacs-bbedit-ili-sublime-text-2/548868#548868, за исключением того, что я использую файл python для формата json. поставить следующий скрипт pretty-json.py
в
~/ Библиотека / Приложение \ Поддержка /BBEdit/ Текст \ Фильтры
#!/usr/bin/env python
# You can change above she-bang line depending on your Mac configuration
import sys
import json
def main():
input = sys.stdin.read()
try:
obj = json.loads(input)
except Exception as e:
print input + "\n\nERROR: " + str(e)
return 1
print(json.dumps(obj, indent=2))
return 0
if __name__ == '__main__':
sys.exit(main())
- Откройте файл JSON в BBEdit.
- Выберите "Текст"> "Применить текстовый фильтр"> "Pretty-json.py".
Используя приведенный выше скрипт, если вы столкнулись с какой-либо проблемой при ошибке форматирования, скрипт добавит ошибку в новый файл и не изменит исходный json
Ссылка: https://gist.github.com/brokaw/95ade1358954cd97d0f2c8e992e14b08
Для получения дополнительной информации: https://github.com/dineshbhagat/mac-configurations/tree/master/bbedit
Согласно http://jsonprettyprint.com/ Textmate и Sublime не делают правильные вещи.
Какую версию Emacs вы использовали?
С 24.2.1, ваш BLOB-объект JSON идеально подходит для отступов js-mode
(Стандартный режим Emac по умолчанию для JavaScript).
Если вы занимаетесь какой-либо важной разработкой Javascript, я рекомендую проверить js2-режим https://github.com/mooz/js2-mode, который превращает Emacs в отличную JS IDE.
Возвышенный Довольно JSON
Возвышенный Pretty JSON отступ первый {
Что ж. Вот что я получаю:
[
{
"settings": [
"master"
],
"appPort": "8666",
"specs": {
"frame": {
"type": "HTMLFrameMojit",
"config": {
"deploy": true,
"child": {
"type": "HelloWorldMojit"
},
"assets": {
"top": {
"css": [
"/static/HelloWorldMojit/assets/index.css"
]
}
}
}
}
}
},
{
"settings": [
"environment:development"
],
"staticHandling": {
"forceUpdate": true
}
}
]
Монтаж
Внутри Sublime Text 2: Предпочтение => Управление пакетами => Установить пакет => "Pretty Json" => Перезапустить Sublime => Выбрать JSON Text => Нажмите:
- Linux: Ctrl + Alt + J
- Windows: Ctrl + Alt + J
- OS X: cmd+ctrl+j
Просто проверьте, какая версия python установлена:
использование json_pretty будет работать только в том случае, если интерпретатор python установлен в вызываемой оболочке. Например, мой json_pretty работает, и я модифицировал его на Ventura следующим образом:
#!/bin/zsh
python3 -m json.tool
- Создайте файл сценария
fast-json-pretty.sh
в~/Library/Application\ Support/BBEdit/Text\ Filters/
- Вставьте следующий скрипт:
#!/usr/bin/env bash
/usr/local/bin/jq .
- Примените текстовый фильтр следующим образом:
Menu bar
->Text
->Apply Text Filter
->fast-json-pretty
Это переработанная версия версии JQ скрипта DKB, так как для этого, по крайней мере, для меня, требовался полный путь и точка (.) В конце.
Это решение, просто использующее Google Chrome или сам NodeJS, и вот как:
Просто откройте инструмент разработчика Google Chrome или приглашение NodeJS и введите
obj =
и скопируйте и вставьте в него объект, чтобы он выглядел как
obj = [
{
// etc
Теперь в Google Chrome просто введите
JSON.stringify(obj, null, 4)
и у вас будет форматированный JSON. В NodeJS, поскольку он распечатывает
\n
дословно, вы можете использовать
console.log(JSON.stringify(obj, null, 4))
Если вы хотите, чтобы отступ был всего 2 пробела, просто используйте
2
вместо
4
.
Если вы хотите, чтобы отступы были табуляцией, а не пробелами, просто используйте
JSON.stringify(obj, null, "\t")