Можно ли получить весь объект из отладчика как Json?
Есть вариант View text, а можно как-нибудь View JSON?

Вы можете использовать плагин Показать как ... для IntelliJ.
A small plugin to display formatted data out of the debugger and console.
Uses IntelliJ's build-in formatting capabilities. No more need to copy values from debugger or console to a file to format them there. Following formats are supported: JSON, SQL, XML, Base64 encoded JSON, Base64 encoded text
К сожалению, при отладке он работает некорректно, как указано в разделе комментариев плагина. Я попробовал себя безуспешно.
Как люди говорят в обзоре плагина и в нескольких комментариях здесь, на StackOverflow, этот плагин не работает (больше?). Какая жалость, что такая функциональность не является стандартной в IntelliJ IDEA :(
В качестве альтернативы, как показано здесь, вы можете использовать следующий фрагмент кода в вашем наблюдателе отладки:
new ObjectMapper()
.setSerializationInclusion(JsonInclude.Include.NON_NULL)
.writerWithDefaultPrettyPrinter()
.writeValueAsString( myObject )
Я считаю, что это не сработает для отладки GWT / на стороне клиента
Просто следуйте ему: Файл | Настройки | Сборка, выполнение, развертывание | Отладчик | Просмотры данных | Средства визуализации типа Java, щелкните +, чтобы добавить новую визуализацию, копия в порядке :) вы можете выбрать другую банку для ее форматирования
А теперь, подай заявку, присоединяйся ~
Если у вас есть зависимость от gson в вашем проекте, вы можете создать контрольную переменную
new GsonBuilder().setPrettyPrinting().create().gson.toJson(myObject)
где myObject - ваш объект.
Обновлено: как отмечено в комментариях, это не идеально, так как для некоторых переменных вы получите ответ «stackoverflow»
Как предлагает @ Мистер Хан ответ, вот как это можно сделать:
File | Settings | Build, Execution, Deployment | Debugger | Data Views | Java Type Renderers+, чтобы добавить новое средство визуализации.JSON rendererjava.lang.Object для Apply renderer to objects of typeUse following expression: и введите такое выражение:if (null == this || this instanceof String)
return this;
new com.google.gson.GsonBuilder().setPrettyPrinting().create().toJson(this);
Иногда для определенных объектов я получаю исключение StackOverflow или OutOfMemory. В остальном работает как шарм. Спасибо.
Да, я вижу тот же @Dileepa - но я думаю, что это верно для любого такого подхода? Я попытался сделать исключения в коде и вернуть исходное "this", но это, похоже, не помогло.
Принятый ответ мне не подходит, но это работает. Кроме того, мне нравится, что это решение без плагинов. Просто редактируйте настройки, никаких проблем с загрузкой плагинов.
Я хотел использовать встроенную функцию IntelliJ для таких задач, и этот ответ делает именно это. Слава богу, я не использую плагин для таких нужд.
Я получаю значение JSON основного объекта, но все поля дочернего объекта пусты, а не копируются в JSON.
да, это не идеально - я больше не использую его, так как обнаружил, что переполнение стека слишком раздражает
Я получаю, что метод выбросил исключение java.lang.ClassNotFoundException.
да, для этого решения требуется библиотека google gson, и вам может быть лучше использовать это решение, который основан на моем!
Следуйте инструкции @BradParks и используйте следующее выражение.
Для меня это не сработало без полностью определенных имен классов. Я также добавил некоторые модификации в ObjectMapper. По какой-то причине, которую я не понимаю, даже если у меня Apply renderers to object of type установлен на java.lang.Object, мне нужно было преобразовать this в (Object)this при использовании в качестве параметра метода writeValueAsString().
if (this == null
|| this instanceof CharSequence
|| this instanceof Number
|| this instanceof Character
|| this instanceof Boolean
|| this instanceof Enum) {
// Here you may add more sophisticated test which types you want to exclude from the JSON conversion.
return this;
}
new com.fasterxml.jackson.databind.ObjectMapper()
.registerModule(new com.fasterxml.jackson.datatype.jsr310.JavaTimeModule())
.disable(com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.setVisibility(
com.fasterxml.jackson.annotation.PropertyAccessor.FIELD,
JsonAutoDetect.Visibility.ANY)
.setSerializationInclusion(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL)
.writerWithDefaultPrettyPrinter()
.writeValueAsString((Object)this);
Какая жалость, что такая функциональность не является стандартной в IntelliJ IDEA :(