|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
Есть задача открыть объект, преобразовать его в JSON, как-то его поправить и обратно из JSON сохранить. В этот момент у меня возникает проблема, при преобразовании JSON в объект методом ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject() теряется id, объект получается как будто новый. Соответственно, при сохранении он и ведет себя как новый. Есть ли возможность при конвертации json в объект штатными средствами подхватывать и изменять уже существующие сохраненные объекты? Как вы разрешали для себя такую ситуацию? Пример могу соорудить, но мне кажется, что те, кто с этим сталкивался, и так в курсе проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2016, 21:10 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
Блок А.Н., Зачем так сложно. Преобразовать, затем самому подправить, затем назад преобразовать? Смысл вообще не понятен. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 09:43 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
Блок А.Н.Есть задача открыть объект, преобразовать его в JSON, как-то его поправить и обратно из JSON сохранить. Есть ли возможность при конвертации json в объект штатными средствами подхватывать и изменять уже существующие сохраненные объекты? Как вы разрешали для себя такую ситуацию?Например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 09:45 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
О-О-ОБлок А.Н., Зачем так сложно. Преобразовать, затем самому подправить, затем назад преобразовать? Смысл вообще не понятен.Наверное потому, что этапБлок А.Н.Есть задача открыть объект, преобразовать его в JSON, как-то его поправить и обратно из JSON сохранить.должен будет происходить вне Caché? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 09:48 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
servit, да, этап правки объекта должен проходить на клиенте в браузере. Мне показалось что json хороший способ передачи объектов каше в яваскрипт и обратно и что так все делают. Пример не получилось скомпировать, у нас на рабочей версия каше 2014, у меня на компе стоит 2015.2, по-видимому, 2016 только вышла. Но все равно он не отражает суть того, что мне нужно. Мне приходит из клиента некий json, включающий в себя в том числе и id, и мне нужно из него создать объект, причем, если указан id, заменить хранимый объект в базе. В примере же мы открываем объект, и в него "заливаем" некий json. В моем случае я не знаю, какой объект мне открывать и по сути создаю его заново, но создать хочу уже с ID, чтобы при сохранении он затер существующий. Пока я вижу два пути, и оба они мне очень не нравятся: - превратить json в %ZEN.proxyObject, посмотреть, если ли там ID, если есть, то открыть объект и присвоить в него поля из %ZEN.ProxyObject - написать свой парсер. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 11:49 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
Блок А.Н.Но все равно он не отражает суть того, что мне нужно. А теперь?Пример для 2016.2 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50.
Код: plaintext 1. 2. 3. 4. 5. 6.
Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 18:11 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
servit, Значит, велосипед, жаль. И даже в новых версиях без костылька не взлетает :-(. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 19:18 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
Поправил ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject() Совсем нехорошо, но проще всего. Писать свой парсер лень, да и безглючно я его не напишу. Скопировать код IS в свой класс можно, что что-то меня от этого тоже останавливает. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2016, 09:03 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
servit Добрались руки до того, чтобы пощупать новые версии Каше. Пытаюсь запустить ваш код - не получается. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2016, 19:24 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
Вообще смотрю я на это все и не понимаю. Вроде бы все хорошо, сделали поддержку JSON, только %Object живет своей жизнью, а все остальные классы своей и друг с другом не пересекаются. Наверное в этом бы какой-то смысл, может быть идеологическая чистота или еще что-нибудь такое, только зачем она нужна в этом случае? В одной пробирке две не смешивающиеся жидкости. Я понимаю, что еще практически еще ни в чем не разобрался и в своей манере полез писать на форум, но первая эмоция именно такая - недоумение. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2016, 19:31 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
Блок А.Н.Пытаюсь запустить ваш код - не получается.Правильно не получается. Будьте внимательны, я указал минимальную версию Caché для работы примера: 19006466 Блок А.Н.Вообще смотрю я на это все и не понимаю. Вроде бы все хорошо, сделали поддержку JSON, только %Object живет своей жизнью, а все остальные классы своей и друг с другом не пересекаются.Это не так. В версиях 2016.(2/3) интеграция JSON с SQL, объектами и "Caché Document Data Model", а также его производительность существенно улучшены и это не предел. Работа ведётся и дальше: кое какие улучшения запланировали на 2016.4/2017.1, а некоторые уже решили в 2016.3. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2016, 16:25 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
servit, понятно, спасибо. Получается, пока без костылей и самоделок не обойтись даже на новых версиях. Значит ждем. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2016, 15:44 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
Блок А.Н.понятно, спасибо. Получается, пока без костылей и самоделок не обойтись даже на новых версиях. Значит ждем.Для хранения, извлечения, обновления непосредственно JSON-объектов добавили новую модель данных - Caché Document Data Model (сокращённо DocDM). В которой можно индексировать данные для ускорения выборки, использовать готовый REST API, SQL и/или JSON Path Language, хранить любые JSON-объекты. Причём в этой модели необязательно, чтобы набор полей в коллекции "однотипных" экземпляров совпадал. Вот небольшой пример с демонстрацией лишь некоторых возможностей: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2016, 09:22 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
servit, Тут такое дело. Всё опять будет переделано, все системные методы выброшены и переименованные в обычные % методы (с "правильным", уже привычным соглашением об именах). Ну т.е. не $push, а %Push, не $new а %New, не $getCollection а %GetCollection. Более подробные детали этой переделки будут сообщены дополнительно (в community). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2016, 13:48 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
Timur SafinВсё опять будет переделаноЭто нормально для FieldTest. Более того, я думаю - не последняя. Главное, что функционал останется. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2016, 14:46 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
servitTimur SafinВсё опять будет переделаноЭто нормально для FieldTest. Более того, я думаю - не последняя. Главное, что функционал останется.Одна версия уже успела уйти в релиз, так что это уже может быть проблемой, у меня уже один проект в продакшене с $ ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2016, 14:58 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
DAiMorОдна версия уже успела уйти в релиз, так что это уже может быть проблемой, у меня уже один проект в продакшене с $Что касаетсяTimur Safin<..>не $getCollection а %GetCollection<..>, то это DocDM, который пока не в релизе. А остальные методы можно обернуть в макросы с условной компиляцией, поставив в зависимость текущую версию Caché. eduard93 пошёл именно этим путём . PS: согласен, нехорошо менять API после релиза. Это тот случай, когда: "Семь раз отмерь, один - отрежь." ("Look before you leap") ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2016, 15:46 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
Timur Safin все системные методы выброшены и переименованные в обычные % методы (с "правильным", уже привычным соглашением об именах) Да!!! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2016, 12:20 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
Есть еще момент, который меня смущал (если у меня опять в голове все не перепуталось, и я действительно правильно помню то, работал экспорт в 2014): Каше объекты, на которые есть ссылки, превращает в дочерний узел JSON. Это не всегда хорошо, так как в некоторых случаях можно высосать через объект полбазы. Можно ограничивать глубину вложенности, но это не то. На мой взгляд, нужно при выводе ссылок на объекты выводить его ID (если возможно определить), либо вообще регулировать этот вопрос параметрами поля. При разборе JSON тоже полезно уметь понимать и принимать не полную структуру объекта, а его ID. Что-то в этом направлении делается? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2016, 08:07 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
Блок А.Н.Каше объекты, на которые есть ссылки, превращает в дочерний узел JSON. Это не всегда хорошо, так как в некоторых случаях можно высосать через объект полбазы. Можно ограничивать глубину вложенности, но это не то. На мой взгляд, нужно при выводе ссылок на объекты выводить его ID (если возможно определить), либо вообще регулировать этот вопрос параметрами поля. При разборе JSON тоже полезно уметь понимать и принимать не полную структуру объекта, а его ID. Что-то в этом направлении делается?Обязательно.Пример для 2016.3 Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2016, 08:38 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
servit, В формате не устраивает то, что в нем вообще нет ID. Соотвественно, переданный в JSON объект обратно в хранимый не преобразуешь. Если на внешнем уровне еще можно вручную прилепить ID, то на вложенных узлах что делать? Создавать новые объекты? А если это ссылка, например, на запись справочника? Сохранять в нем новую запись или не сохранять ссылку вообще? Писать костыли на каждый класс при том, что сам механизм ущербен - как-то неправильно. Ну и как я уже говорил, создание дочернего узла JSON для хранимого объекта, доступного по ссылке, не всегда нужно (и вообще, непонятно, нужно ли) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2016, 09:37 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
Блок А.Н., ИМХО, это общая проблема ссылочной целостности при обмене данными. Не побоитесь передавать ссылку на ID записи справочника? А вдруг "на той стороне" ID в базе по какой-то причине другие? Возможно, GUID или какой-то его "предметный" аналог подошёл бы лучше. PS. Возможно, пишу тривиальные вещи, и я просто неправильно вас понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2016, 09:42 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
Alexey Maslov, guid тоже может быть id, не вижу проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2016, 10:01 |
|
JSON to Object (ID)
|
|||
---|---|---|---|
#18+
Блок А.Н.В формате не устраивает то, что в нем вообще нет ID. Соотвественно, переданный в JSON объект обратно в хранимый не преобразуешь.Действительно, в формате нет ID, но есть его аналог - $REFERENCE, а также $CLASSNAME, поэтому "из коробки" всё есть для преобразования в обе стороны. Или мы говорим о разных вещах? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2016, 10:44 |
|
|
start [/forum/topic.php?fid=39&msg=39271844&tid=1556436]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 270ms |
total: | 441ms |
0 / 0 |