Обновить

CraftHub — или как я устал редактировать JSON вручную и написал редактор

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели16K
Всего голосов 18: ↑18 и ↓0+22
Комментарии33

Комментарии 33

Пожалуйста: https://jsoneditoronline.org/

пользуюсь - даже не вспомню сколько, больше 8 лет точно

Кроссплатформенно, можно расшарить и поделится ссылкой, есть куча других фишек. и бесплатно

не грузится без впн чета

Да, пользуюсь этим редактором, но вот незадача без впн у меня не открывается, и редактирования табличного как в excel там тоже нет, а эту штуку обязательно попробую, потому что тоже часто сталкиваюсь с редактированием json

Спасибо за полезный источник, подгляжу идеи для своего решения. Стал задумываться о веб версии

Без VPN недоступен, но можно использовать этим: https://jsonformatter.org/json-editor

Есть оптимизация под большие json?

Для удобного пользования реализован поиск, также хочу отметить, что максимальная вложенность (глубина) json свойств 50

А еще удобная фича при работе с Json файлами - это иметь возможность сравнивать однотипные json файлы( имеющие схожую структуру), но с разными данными. Сравнивать , сразу же редактировать и сохранять если надо. Когда Таких файлов больше чем два. Загружаешь в программу 3-4-5 разных файлов и сразу видишь отличия. Очень полезная функция. Когда надо сравнить два файла - это легко. а вот 3 и больше уже сложности.

Отличная идея, я подумаю, если не трудно, можете создать issue на git hub, чтобы не забылось :)

...и синхронный скрол при просмотре содержимого нескольких файлов!)

Но думаю это будет отдельным режимом, просто нужно сделать его максимально гибким под разные варианты использования

Спасибо за статью. Концептуально, приложение правильное и нужное, но лично мне для моих нужд не хватает панели навигации по файлам – неудобно открывать файлы по одному, хотелось бы иметь возможность выбрать конкретную папку (директорию проекта) и внутри нее увидеть структуру вложенных директорий и все json’ы в них в виде дерева. Ну и чтобы дальше во время работы можно было оперативно переключаться между файлами в этом дереве.

Здорово! Можете, пожалуйста создать issue на github, чтобы я не забыл об этом. Идея очень крутая

А потом попросят поиск по всем файлам проекта, воркспейсы, интеграцию с git и другие IDE-фичи… Не лучше ли сделать экстеншн для готового IDE?

Хотел бы обкатать на приложении, самое лучшее собрать воедино, а потом уже и web версию запилить можно и экстеншн, это не проблема

забыл сказать, есть возможность мульти выбора файлов, они сами раскидаются по воркспейсам, но выгружать придется все равно по одному

Больше всего в таких штуках нехватает линковки, по этому приходится писать собственные редакторы для контента игр.

Самое простое - в игре у сущностей обычно есть какой-то id (uuid например). Дальше сущности могут ссылатся друг на друга по этим id. К примеру есть 2 сущности: fireball и hero. У "hero" может быть свойство "attackMagic: {uuidOfFireball}"

Было бы круто иметь какой-то meta файл, где для редактора можно было бы расписать relations между сущностями их их тип (1к1, 1кN, NxN и т.п., как в БД), а также какие поля использовать как title для id.

А визуально редактор уже бы рисовал такие поля как enum (selectbox, multibox и т.п.).

в целом идеальный пример редактора - это DataTable / DataBlueprint / FSturct из unrealEngine. Там внутри это сохраняется в бинарном виде с кучей мусора - но сами редакторы данных - супер удобные.

Да, раньше в версии wpf была в зародыше похожая штука, думаю в ближайшее время ее доразвить. Можешь создать issue в репозитории, чтобы я со своим рабочим графиком не забыл. Идея топ, согласен будет мега удобно при разработке

Кажется, что такие штуки лучше делать в виде плагинов для редакторов, чтобы не городить велосипед с синтаксисом или навигацией по файлам.

Делал в каком-то смысле похожую штуку для игры Space Station 14 в виде плагина для VSCode: игровые прототипы и сущности ECS задаются декларативно на YAML, а потом конструируются в рантайме на C#. Демки и описание есть в readme: https://marketplace.visualstudio.com/items?itemName=slava0135.robust-yaml

Ого! Уж не думал что встречу это название здесь, так ещё и разработчика плагина для разработчиков) Зарегался только чтобы сказать Спасибо.

Почему нет Portable варианта? Стараюсь лишний раз не захламлять систему лишними установками. Как минимум "на попробовать" точно.

Вообще не задумывался об этом, постараюсь добавить, спасибо за крутое предложение

можешь добавить, пожалуйста, issue на git с данным предложением, чтобы не затерялось

Для теста решил загрузить json который формируется при сборке проекта - CraftHub.deps.json.
Относительно небольшой json 28кб, всего 376 полей, но открывается очень долго. У меня он открывался 10 секунд. Решил глянуть в чем дело. А оказалось что оно для каждого добавленного при импорте json поля вызывает RebuildColumns. То есть для открытия этого json оно 378 раз создало и удалило все колонки в датагриде. Один раз при создании vm, 376 раз при OnPropertiesChanged, и еще один раз при OnColumnsChanged. Большой json такой программкой будет открываться, вероятно, очень долго.
А все потому что в ImportFromPathAsync

foreach (var field in mappedFields)
    Properties.Add(new JsonPropertyDefinition { Name = field.FieldName, FieldType = field.SelectedType });

Мне нравится ваше замечание, добавил ObservableCollection с отложенным уведомлением об изменениях, что позволяет перестроить 1 раз, а не на каждое уведомление
https://github.com/c3n9/CraftHub/blob/master/CraftHub/Helpers/BulkObservableCollection.cs

FYI В Visual Studio можно вставить JSON или XML сразу в виде C# классов, VS генерирует классы автоматически. Меню Edit - Paste Special - Paste JSON as Classes

Да, есть такая фича, но не работать удобно с данными, подобрать им нужные типы, не всегда корректно работает эта функция

крутой инструмент, спасибо

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации