Я пытаюсь найти способ сделать pretty print
структуру данных JavaScript в удобочитаемой форме для отладки.
У меня довольно большая и сложная структура данных, хранящаяся в JS, и мне нужно написать код для управления ею. Чтобы понять, что я делаю и где ошибаюсь, мне действительно нужно иметь возможность видеть структуру данных во всей ее полноте и обновлять ее всякий раз, когда я вношу изменения через пользовательский интерфейс.
Со всем этим я могу справиться сам, за исключением того, что нашел хороший способ вывести структуру данных JavaScript в удобочитаемую строку. JSON подойдет, но он действительно должен быть хорошо отформатирован и с отступом. Я обычно использую для этого превосходный дамп DOM от Firebug, но мне действительно нужно иметь возможность видеть всю структуру сразу, что, похоже, невозможно в Firebug.
Любые предложения приветствуются.
Заранее спасибо.
Ответы:
Я написал функцию для вывода JS-объекта в читаемой форме, хотя вывод не имеет отступа, но это не должно быть слишком сложно добавить: я сделал эту функцию из той, которую я сделал для Lua (которая намного сложнее ), которая решила эту проблему с отступом.
Вот «простая» версия:
Я посмотрю, как его немного улучшить.
Примечание 1. Чтобы использовать это, сделайте
od = DumpObject(something)
и используйте od.dump. Сложно, потому что мне нужно было значение len (количество элементов) для другой цели. Заставить функцию возвращать только строку - тривиально.Примечание 2: он не обрабатывает циклы в ссылках.
РЕДАКТИРОВАТЬ
Я сделал версию с отступом.
Выберите отступ в строке с рекурсивным вызовом и закрепите стиль, переключив прокомментированную строку после этой.
... Я вижу, вы придумали свою версию, и это хорошо. У посетителей будет выбор.
источник
Используйте JSON.stringify Крокфорда следующим образом:
Переменная
text
будет выглядеть так:Кстати, для этого не требуется ничего, кроме этого JS-файла - он будет работать с любой библиотекой и т. Д.
источник
JSON.stringify((function(){var x = []; x.push(x); return x})())
и многими другими объектамиJSON.stringify(/foo/)
.Вы можете использовать следующие
источник
В
Firebug
случае, если вы простоconsole.debug ("%o", my_object)
можете щелкнуть по нему в консоли и войти в интерактивный проводник объектов. Он показывает весь объект и позволяет раскрывать вложенные объекты.источник
Для Node.js используйте:
Документация по API
источник
Для тех, кто ищет отличный способ увидеть свой объект, проверьте prettyPrint.js
Создает таблицу с настраиваемыми параметрами просмотра для печати где-нибудь в вашем документе. Лучше посмотреть, чем в
console
.источник
Я программирую,
Rhino
и меня не удовлетворил ни один из ответов, опубликованных здесь. Итак, я написал свой собственный симпатичный принтер:Результат выглядит так:
Я также разместил его здесь как Gist для любых будущих изменений, которые могут потребоваться.
источник
jsDump
становится
QUnit ( фреймворк модульного тестирования, используемый jQuery) с использованием слегка исправленной версии jsDump.
JSON.stringify () - не лучший выбор в некоторых случаях.
источник
Взяв на себя инициативу PhiLho (большое спасибо :)), я написал свой собственный, поскольку не мог заставить его делать то, что я хотел. Он довольно грубый и готовый, но он делает то, что мне нужно. Спасибо всем за отличные предложения.
Я знаю, что это не блестящий код, но, как бы то ни было, вот он. Кому-то это может пригодиться:
источник
На самом деле это просто комментарий к статье Джейсона Бантинга «Использовать JSON.stringify Крокфорда», но я не смог добавить комментарий к этому ответу.
Как отмечено в комментариях, JSON.stringify не очень хорошо работает с библиотекой Prototype (www.prototypejs.org). Тем не менее, довольно легко заставить их хорошо работать вместе, временно удалив метод Array.prototype.toJSON, добавленный прототипом, запустите Crockford stringify (), а затем верните его следующим образом:
источник
Я подумал, что ответ Дж. Бантингса на использование JSON.stringify тоже был хорош. Кроме того, вы можете использовать JSON.stringify через объект YUI JSON, если вы используете YUI. В моем случае мне нужно было сделать дамп в HTML, чтобы было проще просто настроить / вырезать / вставить ответ PhiLho.
источник
Многие люди пишут код в этой ветке, оставляя много комментариев по поводу различных ошибок. Мне понравилось это решение, потому что оно казалось законченным и представляло собой единый файл без зависимостей.
браузер
nodejs
Он работал «из коробки» и имел версии для узла и браузера (предположительно, просто разные оболочки, но я не стал копаться, чтобы подтвердить).
Библиотека также поддерживает удобную печать XML, SQL и CSS, но я не пробовал эти функции.
источник
Простой для печати элементов в виде строк:
источник
Моя библиотека NeatJSON имеет версии Ruby и JavaScript . Он находится в свободном доступе по (разрешительной) лицензии MIT. Вы можете просмотреть онлайн-демонстрацию / конвертер по адресу:
http://phrogz.net/JS/neatjson/neatjson.html
Некоторые функции (все необязательно):
источник
flexjson включает функцию prettyPrint (), которая может дать вам то, что вы хотите.
источник