Я выйду на конечности и скажу "нет, такой возможности нет".
AFAIK, кодировка JSON фактически обрабатывается ActiveSupport, а не ActiveRecord. Если вы посмотрите на lib/active_support/json/encoding.rb
для вашего драгоценного камня ActiveSupport, вы увидите, что происходит много обезьянок, добавляющих методы as_json
и encode_json
в некоторые основные классы; as_json
методы просто используются, чтобы сгладить такие вещи, как Time, Regexp и т. д., для более простых типов, таких как String. Интересные патчи для обезьян - это encode_json
, эти методы делают настоящую работу по созданию JSON, и в них нет ничего для контроля окончательного формата вывода; например, Hash-версия выглядит так:
# comments removed for clarity
def encode_json(encoder)
"{#{map { |k,v| "#{encoder.encode(k.to_s)}:#{encoder.encode(v, false)}" } * ','}}"
end
encoder
просто обрабатывает такие вещи, как Unicode и экранирование кавычек. Как видите, encode_json
просто сводит все воедино в одну компактную строку без опций включения красивости.
Все сложные классы, по-видимому, сводятся к Hash или Array во время JSONification, поэтому теоретически вы можете добавить свои собственные патчи обезьяны в Hash и Array, чтобы они создавали что-то симпатичное. Однако у вас могут возникнуть проблемы с отслеживанием глубины структуры, которую вы так производите:
{
"created_at":"2011-07-10T11:30:49+03:00",
"id":5,
"is_deleted":null,
"name":"Mika"
"nested":{
"not":"so pretty now",
"is":"it"
}
}
Было бы довольно прямо, но это:
{
"created_at":"2011-07-10T11:30:49+03:00",
"id":5,
"is_deleted":null,
"name":"Mika"
"nested": {
"not":"so pretty now",
"is":"it"
}
}
будет сложнее, и, по-видимому, вам захочется последнее, особенно в случае с глубоко вложенным JSON, где сложно оценить структуру. Возможно, вы сможете повесить немного состояния на encoder
, который обходит, но это будет немного уродливым и хрупким.
Более выполнимым вариантом будет выходной фильтр для анализа и переформатирования JSON перед отправкой его в браузер. Вы должны были бы одолжить или построить симпатичный принтер, но это не должно быть так сложно. Вы должны быть в состоянии условно прикрепить указанный фильтр только для вашей среды разработки, а также без особых уродств.
Если вы просто хотите отлаживать взаимодействия на основе JSON, то, возможно, расширение JSONovich для Firefox будет менее хлопотным. JSONovich имеет несколько приятных функций (таких как расширение и свертывание вложенных структур), которые выходят за рамки простой красивой печати.
Кстати, я рассмотрел Rails 3.0 и 3.1 для этого, вы можете проверить Rails 2, если вам интересно.