Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 JSON to Object (ID)  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3806
Есть задача открыть объект, преобразовать его в JSON, как-то его поправить и обратно из JSON сохранить.
В этот момент у меня возникает проблема, при преобразовании JSON в объект методом ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject() теряется id, объект получается как будто новый. Соответственно, при сохранении он и ведет себя как новый.
Есть ли возможность при конвертации json в объект штатными средствами подхватывать и изменять уже существующие сохраненные объекты? Как вы разрешали для себя такую ситуацию?

Пример могу соорудить, но мне кажется, что те, кто с этим сталкивался, и так в курсе проблемы.
31 мар 16, 21:10    [19002255]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 211
Блок А.Н.,

Зачем так сложно.
Преобразовать, затем самому подправить, затем назад преобразовать?
Смысл вообще не понятен.
1 апр 16, 09:43    [19003491]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
Блок А.Н.
Есть задача открыть объект, преобразовать его в JSON, как-то его поправить и обратно из JSON сохранить.
Есть ли возможность при конвертации json в объект штатными средствами подхватывать и изменять уже существующие сохраненные объекты? Как вы разрешали для себя такую ситуацию?
Например:
Class my.test Extends %Persistent
{

Property As %Integer InitialExpression ];

ClassMethod Test(case "")
{
  
..%KillExtent()
  
..%New().%Save()
  
  
obj=..%OpenId(1)
  
"До: f = ",obj.f,!
  
  
if case="" {
    
; преобразовываем наш объект в объект JSON (тип %Object, не строка!)
    
json={"returnValue":obj}
    
"(test1) json = ",$classname(json),!
    
    
json.returnValue.f=3 ;меняем значение свойства
    
    ; преобразовываем JSON обратно в наш тип %RegisteredObject
    
obj.$compose(json)
  
}else{
    
; преобразовываем наш объект в объект JSON (тип %Object, не строка!)
    
json=({}).$fromObject(obj)
    
/*
    ; или так
    ; преобразовываем наш объект сначала в JSON-строку, потом в объект JSON (тип %Object)
    s json=({}).$fromJSON(obj.$toJSON())
    */

    
"(test2) json = ",$classname(json),!
    
    
json.f=3 ;меняем значение свойства

    ; преобразовываем JSON-объект обратно в наш тип %RegisteredObject
    
json.$compose(obj)
  
}
  
  
;сохраняем как обычно
  
obj.%Save()
  
obj

  
"После: f = ",..%OpenId(1).f
}

}
Результат:

USER>d ##class(my.test).Test()
До: f = 5
(test1) json = %Library.Object
После: f = 3
USER>d ##class(my.test).Test(1)
До: f = 5
(test2) json = %Library.Object
После: f = 3
USER>
1 апр 16, 09:45    [19003508]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
О-О-О
Блок А.Н.,

Зачем так сложно.
Преобразовать, затем самому подправить, затем назад преобразовать?
Смысл вообще не понятен.
Наверное потому, что этап
Блок А.Н.
Есть задача открыть объект, преобразовать его в JSON, как-то его поправить и обратно из JSON сохранить.
должен будет происходить вне Caché?
1 апр 16, 09:48    [19003523]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3806
servit,

да, этап правки объекта должен проходить на клиенте в браузере. Мне показалось что json хороший способ передачи объектов каше в яваскрипт и обратно и что так все делают.

Пример не получилось скомпировать, у нас на рабочей версия каше 2014, у меня на компе стоит 2015.2, по-видимому, 2016 только вышла. Но все равно он не отражает суть того, что мне нужно.

Мне приходит из клиента некий json, включающий в себя в том числе и id, и мне нужно из него создать объект, причем, если указан id, заменить хранимый объект в базе. В примере же мы открываем объект, и в него "заливаем" некий json. В моем случае я не знаю, какой объект мне открывать и по сути создаю его заново, но создать хочу уже с ID, чтобы при сохранении он затер существующий.

Пока я вижу два пути, и оба они мне очень не нравятся:
- превратить json в %ZEN.proxyObject, посмотреть, если ли там ID, если есть, то открыть объект и присвоить в него поля из %ZEN.ProxyObject
- написать свой парсер.
1 апр 16, 11:49    [19004276]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
Блок А.Н.
Но все равно он не отражает суть того, что мне нужно.
+ А теперь?
Пример для 2016.2
Class my.test Extends %Persistent
{

Property As %Integer InitialExpression ];

/// d ##class(my.test).Test()
ClassMethod 
Test()
{
  
#define JSONUpsert(%json) $s(%json."_id"="":$system.OBJ.New(%json."_class"),1:$system.OBJ.OpenId(%json."_class",%json."_id"))
  
  d 
..%KillExtent()
  
..%New().%Save()
  
  
obj1=..%OpenId(1) ; или ..%New()
  
  ; отправляем клиенту JSON-строку
  
"<- f = ",obj1.f,!,"<- json = ",obj1.$toJSON(),!!
  
  
; меняем наш JSON где-то на стороне и получаем его обратно. 
  ; допустим мы получили это
  
  
jsonStr="{""_class"":""my.test"",""_id"":""1"",""f"":3}"
  
"-> json = ",jsonStr,!
  
  
; преобразовываем JSON-строку в JSON-объект
  
json=({}).$fromJSON(jsonStr)
  
  
; создаём или открываем объект нужного типа (и с нужным ID)
  
obj2=$$$JSONUpsert(json)
  
; заполняем его данными из JSON-объекта 
  
json.$compose(obj2)

  
;сохраняем как обычно
  
obj2.%Save()
  
obj2

  
"-> f = ",..%OpenId(1).f
}

/// Дополнительно к встроенному поведению, также присваиваем значения свойствам _class и _id
Method 
%ToDynamicObject(
  
target As %Object "",
  
ignoreUnknown 0) [ ServerOnly = 1 ]
{
  
s:target="" target {}
  
target."_class" $classname() 
  
target."_id" = ..%Id()
  
##super(.target,.ignoreUnknown)
}

}
Результат:

USER>d ##class(my.test).Test()
<- f = 5
<- json = {"_class":"my.test","_id":"1","f":5}

-> json = {"_class":"my.test","_id":"1","f":3}
-> f = 3
USER>
Для более старых версий легко можно сделать только отправку:
 ##class(%ZEN.Auxiliary.jsonProvider).%WriteJSONStreamFromObject(.stream,..%OpenId(1),,,1,"aelqoc")
 
"<- json = ",stream.Read(),!
С заполнением уже открытого объекта из JSON придётся писать велосипед.
1 апр 16, 18:11    [19006466]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3806
servit,

Значит, велосипед, жаль.
И даже в новых версиях без костылька не взлетает :-(.
Спасибо.
1 апр 16, 19:18    [19006655]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3806
Поправил ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject()
Совсем нехорошо, но проще всего. Писать свой парсер лень, да и безглючно я его не напишу. Скопировать код IS в свой класс можно, что что-то меня от этого тоже останавливает.
Вместо

Set pObject $classmethod(tClass,"%New")

теперь

id = $G(tPropValues("_id"))
if id = "" 
{
 
pObject $classmethod(tClass,"%New")
}
else 
{
 
pObject $classmethod(tClass,"%OpenId",id)
}
2 апр 16, 09:03    [19008075]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3806
servit

Добрались руки до того, чтобы пощупать новые версии Каше.
Пытаюсь запустить ваш код - не получается.
USER>w $zv
Cache for Windows (x86-32) 2016.1.1 (Build 107U) Sat Jun 11 2016 19:32:35 EDT
USER>##class(my.test).Test()
До: f = 5
(test1) json = %Library.Object

d obj.$compose(json)
^
<METHOD DOES NOT EXIST>zTest+11^my.test.1 *$compose,my.test
В какой версии появляются $compose, $fromObject? Вроде использую самую новую официально выпущенную на текущий момент
8 июл 16, 19:24    [19387930]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3806
Вообще смотрю я на это все и не понимаю.
Вроде бы все хорошо, сделали поддержку JSON, только %Object живет своей жизнью, а все остальные классы своей и друг с другом не пересекаются. Наверное в этом бы какой-то смысл, может быть идеологическая чистота или еще что-нибудь такое, только зачем она нужна в этом случае? В одной пробирке две не смешивающиеся жидкости.

Я понимаю, что еще практически еще ни в чем не разобрался и в своей манере полез писать на форум, но первая эмоция именно такая - недоумение.
8 июл 16, 19:31    [19387937]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
Блок А.Н.
Пытаюсь запустить ваш код - не получается.
Правильно не получается.
Будьте внимательны, я указал минимальную версию Caché для работы примера: 19006466
Блок А.Н.
Вообще смотрю я на это все и не понимаю.
Вроде бы все хорошо, сделали поддержку JSON, только %Object живет своей жизнью, а все остальные классы своей и друг с другом не пересекаются.
Это не так.
В версиях 2016.(2/3) интеграция JSON с SQL, объектами и "Caché Document Data Model", а также его производительность существенно улучшены и это не предел. Работа ведётся и дальше: кое какие улучшения запланировали на 2016.4/2017.1, а некоторые уже решили в 2016.3.
9 июл 16, 16:25    [19389785]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3806
servit,

понятно, спасибо. Получается, пока без костылей и самоделок не обойтись даже на новых версиях. Значит ждем.
10 июл 16, 15:44    [19391920]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
Блок А.Н.
понятно, спасибо. Получается, пока без костылей и самоделок не обойтись даже на новых версиях. Значит ждем.
Для хранения, извлечения, обновления непосредственно JSON-объектов добавили новую модель данных - Caché Document Data Model (сокращённо DocDM).
В которой можно индексировать данные для ускорения выборки, использовать готовый REST API, SQL и/или JSON Path Language, хранить любые JSON-объекты. Причём в этой модели необязательно, чтобы набор полей в коллекции "однотипных" экземпляров совпадал.
+ Вот небольшой пример с демонстрацией лишь некоторых возможностей:
db ##class(%DataModel.Document.Database).$getDatabase()

;удаляем данные от предыдущих тестов
db.$dropCollection("test")

;получаем коллекцию наших объектов
coll db.$getCollection("test")

; сохраняем некий объект в БД
coll.$insert({"id":1,"поле 1":"значение 1","a":true,"b":null}
; вставляем или обновляем другой объект в БД с documentID=2
coll.$upsert(2,{"id":1,"поле 2":"значение 2","a":false,"b":"null"}

; отображаем содержимое нашей коллекции
coll.$getAll().$toJSON()    

; выбираем один объект, где b is null и отображаем его (здесь вместо JSON Path Language можно использовать "обычный" SQL)
rset=coll.$queryCollection(
        
{"columns":[{"column":"b","path":"$.b"}],
         
"restriction":"b is null",
         
"limit":1})
!!,"1)",!,rset.$toJSON()

; открываем объект c documentID=2 и отображаем его
obj=coll.$get(2)
!!,"2) ",obj.$toJSON(),!!

; меняем объект (можем добавить новые поля или удалить уже существующие)
obj."новое поле 1"="новое значение 1"
obj.$remove("id")

; обновляем его в БД
coll.$replace(2,obj)
; отображаем текущее состояние нашей БД
coll.$getAll().$toJSON()    

USER>^test
[
{"documentID":1,"documentVersion":1,"content":{"id":1,"поле 1":"значение 1","a":true,"b":null}},
{"documentID":2,"documentVersion":2,"content":{"id":1,"a":false,"b":"null","поле 2":"значение 2"}}
]

1)
[
{"_sourceID":1,"_sourceVersion":1,"content":{"id":1,"поле 1":"значение 1","a":true,"b":null}}
]

2) {"id":1,"a":false,"b":"null","поле 2":"значение 2"}

[
{"documentID":1,"documentVersion":1,"content":{"id":1,"поле 1":"значение 1","a":true,"b":null}},
{"documentID":2,"documentVersion":3,"content":{"a":false,"b":"null","поле 2":"значение 2","новое поле 1":"новое значение 1"}}
]
11 июл 16, 09:22    [19393357]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
Timur Safin
Member

Откуда:
Сообщений: 54
servit,

Тут такое дело.

Всё опять будет переделано, все системные методы выброшены и переименованные в обычные % методы (с "правильным", уже привычным соглашением об именах).

Ну т.е. не $push, а %Push, не $new а %New, не $getCollection а %GetCollection. Более подробные детали этой переделки будут сообщены дополнительно (в community).
11 июл 16, 13:48    [19394938]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
Timur Safin
Всё опять будет переделано
Это нормально для FieldTest. Более того, я думаю - не последняя. Главное, что функционал останется.
11 июл 16, 14:46    [19395285]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2676
servit
Timur Safin
Всё опять будет переделано
Это нормально для FieldTest. Более того, я думаю - не последняя. Главное, что функционал останется.
Одна версия уже успела уйти в релиз, так что это уже может быть проблемой, у меня уже один проект в продакшене с $
11 июл 16, 14:58    [19395357]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
DAiMor
Одна версия уже успела уйти в релиз, так что это уже может быть проблемой, у меня уже один проект в продакшене с $
Что касается
Timur Safin
<..>не $getCollection а %GetCollection<..>
, то это DocDM, который пока не в релизе.
А остальные методы можно обернуть в макросы с условной компиляцией, поставив в зависимость текущую версию Caché. eduard93 пошёл именно этим путём.

PS: согласен, нехорошо менять API после релиза. Это тот случай, когда: "Семь раз отмерь, один - отрежь." ("Look before you leap")
11 июл 16, 15:46    [19395692]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 944
Timur Safin
все системные методы выброшены и переименованные в обычные % методы (с "правильным", уже привычным соглашением об именах)
Да!!! :)
12 июл 16, 12:20    [19399133]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3806
Есть еще момент, который меня смущал (если у меня опять в голове все не перепуталось, и я действительно правильно помню то, работал экспорт в 2014):
Каше объекты, на которые есть ссылки, превращает в дочерний узел JSON. Это не всегда хорошо, так как в некоторых случаях можно высосать через объект полбазы. Можно ограничивать глубину вложенности, но это не то.
На мой взгляд, нужно при выводе ссылок на объекты выводить его ID (если возможно определить), либо вообще регулировать этот вопрос параметрами поля. При разборе JSON тоже полезно уметь понимать и принимать не полную структуру объекта, а его ID.

Что-то в этом направлении делается?
13 июл 16, 08:07    [19402644]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
Блок А.Н.
Каше объекты, на которые есть ссылки, превращает в дочерний узел JSON. Это не всегда хорошо, так как в некоторых случаях можно высосать через объект полбазы. Можно ограничивать глубину вложенности, но это не то.
На мой взгляд, нужно при выводе ссылок на объекты выводить его ID (если возможно определить), либо вообще регулировать этот вопрос параметрами поля. При разборе JSON тоже полезно уметь понимать и принимать не полную структуру объекта, а его ID.

Что-то в этом направлении делается?
Обязательно.
Пример для 2016.3
SAMPLES>##class(Sample.Person).%OpenId(101).$toJSON()
{"$CLASSNAME":"Sample.Employee","$REFERENCE":"101","Age":22,"Company":{"$CLASSNAME":"Sample.Company","$REFERENCE":"4"},"DOB":56006,"FavoriteColors":["Red","Black"],"Home":{"City":"Reston","State":"WY","Street":"5572 Ash Avenue","Zip":79167},"Name":"Gore,David B.","Notes":{"$CLASSNAME":"%Stream.GlobalCharacter","content":["David used to work at DynaDyne.com as a(n) Assistant Director"]},"Office":{"City":"Islip","State":"MN","Street":"9434 First Drive","Zip":15857},"Picture":{"$CLASSNAME":"%Stream.GlobalBinary","$ERROR":"Mapping streams to %AbstractObject not currently supported"},"SSN":"118-21-3732","Salary":44260,"Spouse":{"$CLASSNAME":"Sample.Person","$REFERENCE":"16"},"Title":"Developer"}
Если что-то в формате не устраивает, всегда можно переопределить пару callback-методов, пример которых также приводился выше (19006466).
13 июл 16, 08:38    [19402687]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3806
servit,

В формате не устраивает то, что в нем вообще нет ID. Соотвественно, переданный в JSON объект обратно в хранимый не преобразуешь. Если на внешнем уровне еще можно вручную прилепить ID, то на вложенных узлах что делать? Создавать новые объекты? А если это ссылка, например, на запись справочника? Сохранять в нем новую запись или не сохранять ссылку вообще?
Писать костыли на каждый класс при том, что сам механизм ущербен - как-то неправильно.

Ну и как я уже говорил, создание дочернего узла JSON для хранимого объекта, доступного по ссылке, не всегда нужно (и вообще, непонятно, нужно ли)
13 июл 16, 09:37    [19402837]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1554
Блок А.Н.,

ИМХО, это общая проблема ссылочной целостности при обмене данными. Не побоитесь передавать ссылку на ID записи справочника? А вдруг "на той стороне" ID в базе по какой-то причине другие? Возможно, GUID или какой-то его "предметный" аналог подошёл бы лучше.

PS. Возможно, пишу тривиальные вещи, и я просто неправильно вас понял.
13 июл 16, 09:42    [19402863]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3806
Alexey Maslov,

guid тоже может быть id, не вижу проблемы.
13 июл 16, 10:01    [19402957]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
Блок А.Н.
В формате не устраивает то, что в нем вообще нет ID. Соотвественно, переданный в JSON объект обратно в хранимый не преобразуешь.
Действительно, в формате нет ID, но есть его аналог - $REFERENCE, а также $CLASSNAME, поэтому "из коробки" всё есть для преобразования в обе стороны.
Или мы говорим о разных вещах?
13 июл 16, 10:44    [19403155]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3806
servit
есть его аналог - $REFERENCE
Извиняюсь, не по глазам.
В предыдущих версиях было вроде бы _id и _classname, поэтому искал что-то подобное.
13 июл 16, 12:05    [19403647]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
Блок А.Н.
В предыдущих версиях было вроде бы _id и _classname, поэтому искал что-то подобное.
Забудьте: всё течёт, всё меняется, как подтвердил Timur Safin.
+ Вот обновлённый пример для 2016.3:
Class test.demo Extends %Persistent
{

Property As %String;

ClassMethod Test()
{
  
#Define extentData @$$$defMemberKeyGet($this,$$$cCLASSstorage,$$$nameDefaultStorageNameGet,$$$cSDEFdatalocation)
  
  
k $$$extentData
  
  s 
obj=..%New()
  
obj.f="a"
  
obj.%Save()

  
zw $$$extentData
  
  s 
jsonStr=obj.$toJSON()
  
!,jsonStr,!!
  
  
json=({}).$fromJSON(jsonStr)
  
json.f="bbb"
  
  
##class(%ComposeUtil).$mapObjectToRegistered({"f":"aaa"},..%New()).%Save()
  
##class(%ComposeUtil).$mapObjectToRegistered(json,obj).%Save()
  
  
/*
  ; или
  d ..%FromObject({"f":"aaa"},..%New()).%Save()
  d ..%FromObject(json,obj).%Save()
  */
  
  /*
  ; или
  d ({"f":"aaa"}).$compose({"mode":"lax","returnValue":..%New()}).%Save()
  d json.$compose({"mode":"lax","returnValue":obj}).%Save()
  */
  
  
zw $$$extentData
}

}


Результат:

USER>##class(test.demo).Test()
^test.demoD=1
^test.demoD(1)=$lb("","a")

{"$CLASSNAME":"test.demo","$REFERENCE":"1","f":"a"}

^test.demoD=2
^test.demoD(1)=$lb("","bbb")
^test.demoD(2)=$lb("","aaa")
Т.е. Вы можете на основе JSON(-строки/-объекта) добавить/обновить хранимый объект, причём разными способами.

PS: кроме того в классе ComposeUtil есть много других разных полезных методов, в частности:
mapGenericObjectToAbstractObject
/// This mapper accepts any object (oref) and returns an %AbstractObject. This is just a dispatcher that invokes the most reasonable mapper depending on the 
/// type information gathered from the source object. 
SystemClassMethod 
mapGenericObjectToAbstractObject(
  
source As %CacheString,
  
target As %Library.AbstractObject "",
  
laxMode As %Integer 1,
  
asReference As %Integer 1,
  
nested As %Integer 0As %Library.AbstractObject
{
13 июл 16, 14:38    [19404553]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3806
servit,

Заманчиво. А когда ожидается релиз?
13 июл 16, 17:12    [19405410]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
Блок А.Н.
А когда ожидается релиз?
Надеюсь, в этом году.
13 июл 16, 17:17    [19405436]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
Вывести результат запроса в JSON можно например так:

SAMPLES>##class(%SQL.Statement).%ExecDirect(,"select top 3 Age, DOB from Sample.Person where Age>?",50).$compose("%Array").$toJSON()
[{"Age":66,"DOB":39963},{"Age":68,"DOB":39060},{"Age":56,"DOB":43652}]
22 июл 16, 10:16    [19439988]     Ответить | Цитировать Сообщить модератору
 Re: JSON to Object (ID)  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2676
Кстати, FieldTest 2016.2 серьезно переделали в плане JSON, кое что выпилили, что-то поменяли. 2016.3 версию отменили.
почитатать об изменениях можно здесь, в основном это изменены JSON классы, и вызовы методов вместо $fromJSON теперь %FromJSON. И здесь можно почитать о том как адаптировать свое приложение для перехода с 2016.1
26 авг 16, 10:41    [19593180]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить