Rails: Довольно печатать JSON без излишеств
Я использую приведенный ниже код для отображения несанкционированного сообщения в JSON:
def render_unauthorized
# Displays the Unauthorized message since the user did
# not pass proper authentication parameters.
self.headers['WWW-Authenticate'] = 'Token realm="API"'
render json: {
error: {
type: "unauthorized",
message: "This page cannot be accessed without a valid API key."
}
}, status: 401
end
Какие выходы:
{ "error": { "type": "unauthorized", "message": "Эта страница не может быть доступна без действительного ключа API." }}
Итак, мой вопрос таков: Есть ли способ распечатать это сообщение (БЕЗ размещения его в отдельном представлении и использовании какого-то стороннего драгоценного камня).
Изменить: что такое печатная версия?
Правильно разнесены, и хорошо.. симпатичный. Здесь вывод, который я хотел бы увидеть:
{
"error": {
"type": "unauthorized",
"message": "This page cannot be accessed without a valid API key."
}
}
Решение
Использование ответа @emaillenin ниже работает. Для записи здесь, как выглядит последний код (поскольку он не включил все это):
def render_unauthorized
# Displays the Unauthorized message since the user did
# not pass proper authentication parameters.
self.headers['WWW-Authenticate'] = 'Token realm="API"'
render json: JSON.pretty_generate({ # <-- Here it is :')
error: {
type: "unauthorized",
message: "This page cannot be accessed without a valid API key."
}
}), status: 401
end
Ответы
Ответ 1
Используйте этот вспомогательный метод, встроенный в JSON.
JSON.pretty_generate
Я просто попробовал, и он работает:
> str = '{"error":{"type":"unauthorized","message":"This page cannot be accessed without a valid API key."}}'
> JSON.pretty_generate(JSON.parse(str))
=> "{\n \"error\": {\n \"type\": \"unauthorized\",\n \"message\": \"This page cannot be accessed without a valid API key.\"\n }\n}"
Ответ 2
Если вы (как я) обнаружите, что опция pretty_generate
, встроенная в библиотеку Ruby JSON, недостаточно "хороша", я рекомендую использовать собственный NeatJSON
gem для вашего форматирования.
Чтобы использовать его gem install neatjson
, а затем используйте JSON.neat_generate
вместо JSON.pretty_generate
.
Как и Ruby pp
, он будет хранить объекты и массивы на одной строке, когда они подходят, но при необходимости переносится на несколько. Например:
{
"navigation.createroute.poi":[
{"text":"Lay in a course to the Hilton","params":{"poi":"Hilton"}},
{"text":"Take me to the airport","params":{"poi":"airport"}},
{"text":"Let go to IHOP","params":{"poi":"IHOP"}},
{"text":"Show me how to get to The Med","params":{"poi":"The Med"}},
{"text":"Create a route to Arby's","params":{"poi":"Arby's"}},
{
"text":"Go to the Hilton by the Airport",
"params":{"poi":"Hilton","location":"Airport"}
},
{
"text":"Take me to the Fry in Fresno",
"params":{"poi":"Fry's","location":"Fresno"}
}
],
"navigation.eta":[
{"text":"When will we get there?"},
{"text":"When will I arrive?"},
{"text":"What time will I get to the destination?"},
{"text":"What time will I reach the destination?"},
{"text":"What time will it be when I arrive?"}
]
}
Он также поддерживает различные опции форматирования для дальнейшей настройки вашего вывода. Например, сколько пробелов до/после двоеточий? До/после запятых? Внутри скобок массивов и объектов? Вы хотите отсортировать ключи своего объекта? Вы хотите, чтобы все двоеточия были выстроены?
Использование параметра aligned
позволит вашему выходу выглядеть следующим образом:
{
"error": {
"type" : "unauthorized",
"message" : "This page cannot be accessed without a valid API key."
}
}