Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / JSON в Cache? / 23 сообщений из 23, страница 1 из 1
26.04.2010, 11:57
    #36598029
mys123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
Есть ли в каше классы для преобразования данных в формат JSON и обратно или все-таки придется придумывать свой велосипед?
...
Рейтинг: 0 / 0
26.04.2010, 12:10
    #36598063
VadimF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
Есть наработки на эту тему.
Например, наш ведущий консультант Борис Егоров разработал в свое время специальный класс .
В ZEN сейчас появляется поддержка JSON.
Советую Вам проконсультироваться с Вашим консультантом InterSystems по этому вопросу.
Если консультант поймет Вашу задачу, он сможет что-нибудь посоветовать.

Вадим
...
Рейтинг: 0 / 0
05.05.2010, 11:23
    #36612391
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
Ещё здесь посмотрите: Zen JSON Component
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
23.02.2015, 11:05
    #38886297
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
Что-то изменилось в каше?
Сейчас можно не используя ZEN принимать и передавать объекты в JSON формате наподобие того, как это можно сделать с XML с помощью %XML.Adaptor, %XML.Reader, %XML.Writer?
...
Рейтинг: 0 / 0
23.02.2015, 11:33
    #38886321
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
... ну как минимум нужные классы все равно находятся в пакете %ZEN. Сейчас надо поискать те, которые можно использовать без ZEN.
...
Рейтинг: 0 / 0
23.02.2015, 11:44
    #38886327
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
... например, %ZEN.Auxiliary.jsonProvider
...
Рейтинг: 0 / 0
23.02.2015, 11:54
    #38886332
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
Блок А.Н.... ну как минимум нужные классы все равно находятся в пакете %ZEN. Сейчас надо поискать те, которые можно использовать без ZEN.То есть Вас смущает, что эти методы находятся именно в пакете %ZEN?Блок А.Н.... например, %ZEN.Auxiliary.jsonProviderПоищите в нём новые методы с пометкой:

Код: plaintext
 Utility method to allow direct use of JSON from a non-ZEN context  (such as a CSP page).

Документация 2015.1The jsonProvider code may also be invoked from a non-Zen context by calling one of the following APIs:
%WriteJSONFromArray

%WriteJSONFromObject

%WriteJSONStreamFromArray

%WriteJSONStreamFromObject

%ConvertJSONToObject

источник
...
Рейтинг: 0 / 0
23.02.2015, 16:30
    #38886468
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
Да, я нашел решение, спасибо.
Из-за того, что класс в ZEN, искать пришлось дольше.
Но я хитрый, искал через
select * from %dictionary.methoddefinition where upper(id) like '%JSON%'
...
Рейтинг: 0 / 0
25.02.2015, 13:12
    #38888348
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
Блок А.Н, еще json.m по ссылке c json.org :)
...
Рейтинг: 0 / 0
26.02.2015, 06:20
    #38889036
jxcoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
Еще JSON можно "имитировать" в Cache.

null

Код: javascript
1.
2.
3.
{
  "data": null
}



Код: sql
1.
("data", "type") = "null"



boolean / true

Код: javascript
1.
2.
3.
{
  "data": true
}



Код: sql
1.
2.
("data", "type") = "boolean"
("data", "value") = "true"



boolean / false

Код: javascript
1.
2.
3.
{
  "data": false
}



Код: sql
1.
2.
("data", "type") = "boolean"
("data", "value") = "false"



Number

Код: javascript
1.
2.
3.
{
  "data": 123456789
}



Код: sql
1.
2.
("data", "type") = "number"
("data", "value") = 123456789



String

Код: javascript
1.
2.
3.
{
  "data": "Cogito ergo sum"
}



Код: sql
1.
2.
("data", "type") = "string"
("data", "value") = "Cogito ergo sum"



Object

Код: javascript
1.
2.
3.
4.
5.
6.
{
  "data": {
    "login": "jxcoder",
    "age": 23
  }
}



Код: sql
1.
2.
3.
4.
5.
("data", "type") = "object"
("data", "login", "type") = "string"
("data", "login", "value") = "jxcoder"
("data", "age", "type") = "number"
("data", "age", "value") = 23




Array

Код: javascript
1.
2.
3.
{
  "data": ["jxcoder", 23]
}



Код: sql
1.
2.
3.
4.
5.
("data", "type") = "array"
("data", "0", "type") = "string"
("data", "0", "value") = "jxcoder"
("data", "1", "type") = "number"
("data", "1" "value") = 23
...
Рейтинг: 0 / 0
26.02.2015, 12:39
    #38889340
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
jxcoder, зачем тип?
...
Рейтинг: 0 / 0
27.02.2015, 06:05
    #38890160
jxcoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
doublefint,

Чтобы можно было обратно восстановить JSON.
...
Рейтинг: 0 / 0
27.02.2015, 09:35
    #38890226
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
jxcoder,

Хм, ну а почему json в каше не "имитировать" объектами?
...
Рейтинг: 0 / 0
27.02.2015, 12:42
    #38890476
jxcoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
Блок А.Н.,

Ну если взять произвольный JSON, то как быть?
...
Рейтинг: 0 / 0
27.02.2015, 15:14
    #38890749
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
jxcoderНу если взять произвольный JSON, то как быть?Для этого есть класс %ZEN.proxyObject .
Примеры№1main() [arr] {
  n arr
  s jsonStr="{""data"": {""login"": ""jxcoder"",""age"": 23,""phone"": [""12"",34]}}"
  
  d ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(jsonStr,,.obj)
  
  w "login=",obj.data.login,!
  w "age=",obj.data.age,!
  w "phone=" f i=1:1:obj.data.phone.Count() w obj.data.phone.GetAt(i)," "
  w !!

  // или так
  d obj.data.%Print()
  
  d obj.data.SaveDocument("arr","json")
  zw arr
}
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
USER>d ^test
login=jxcoder
age=23
phone=12 34
 
-----------------
age: 23
login: "jxcoder"
phone:
  [1] 12
  [2] 34
 
arr("json")="63610,51021"
arr("json",1)=""
arr("json",1,"age")=23
arr("json",1,"login")="jxcoder"
arr("json",1,"phone")="@2"
arr("json",2)="list"
arr("json",2,1)=12
arr("json",2,2)=34
№2#include %occStatus
main() [arr] {
  n arr
  
  s obj=##class(%ZEN.proxyObject).%New()
  s obj.boolean=$$$YES
  s obj.number=123
  s obj.string="asd"
  s obj.null=""

  s obj.list=##class(%ListOfDataTypes).%New()
  d obj.list.InsertList($lb(123,"zxc"))

  s obj.arr=##class(%ArrayOfDataTypes).%New()
  d obj.arr.SetAt("b1","a1")
  d obj.arr.SetAt("b2","a2")
  d obj.arr.SetAt("b3","a3")

  s obj.obj=##class(%ZEN.proxyObject).%New()
  s obj.obj.blablabla="f"

  s obj.arrobj=##class(%ArrayOfObjects).%New("%ZEN.proxyObject")
  s tmp=##class(%ZEN.proxyObject).%New()
  s tmp.tmp="q1w2e3"
  d obj.arrobj.SetAt(tmp,"tmp1")

  d obj.%Print()
  w !,"********",!
  d obj.SaveDocument("arr","json")
  zw arr
  w !,"********",!
  
  d obj.%ToJSON(,"caelowt")

}
Код: 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.
53.
54.
USER>d ^test
-----------------
arr: (3@%Library.ArrayOfDataTypes)
arrobj: (5@%Library.ArrayOfObjects)
boolean: 1
list:
  [1] 123
  [2] zxc
 
null: ""
number: 123
obj: -----------------
    blablabla: "f"
 
string: "asd"
 
********
arr("json")="63610,51021"
arr("json",1)=""
arr("json",1,"boolean")=1
arr("json",1,"list")="@2"
arr("json",1,"null")=""
arr("json",1,"number")=123
arr("json",1,"obj")="@3"
arr("json",1,"string")="asd"
arr("json",2)="list"
arr("json",2,1)=123
arr("json",2,2)="zxc"
arr("json",3)=""
arr("json",3,"blablabla")="f"
 
********
{
        "arr": {
                "_class":"%Library.ArrayOfDataTypes",
                "a1":"b1",
                "a2":"b2",
                "a3":"b3"
        },
        "arrobj": {
                "_class":"%Library.ArrayOfObjects",
                "tmp1": {
                        "tmp":"q1w2e3"
                }
        },
        "boolean":1,
        "list":[123,"zxc"
        ],
        "null":"",
        "number":123,
        "obj": {
                "blablabla":"f"
        },
        "string":"asd"
}
...
Рейтинг: 0 / 0
27.02.2015, 15:18
    #38890763
jxcoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
servit,

В данном случае заранее известно как его надо парсить.
...
Рейтинг: 0 / 0
27.02.2015, 15:34
    #38890785
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
jxcoderservit,

В данном случае заранее известно как его надо парсить.main() [arr] {
  n arr
  s jsonStr="{""data"": {""login"": ""jxcoder"",""age"": 23,""phone"": [""12"",34]}}"
  
  d ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(jsonStr,,.obj)
  
  d obj.SaveDocument("arr","json")
  zw arr

  /*
  arr("json")="63610,52000"
  arr("json",1)=""
  arr("json",1,"data")="@2"
  arr("json",2)=""
  arr("json",2,"age")=23
  arr("json",2,"login")="jxcoder"
  arr("json",2,"phone")="@3"
  arr("json",3)="list"
  arr("json",3,1)=12
  arr("json",3,2)=34
  */  
}Можно узнать что в данном случае известно заранее? И в чём состоит конкретно задача: представить произвольный JSON в виде объекта, сохранить его в глобал или иное?
...
Рейтинг: 0 / 0
10.03.2015, 07:49
    #38899353
jxcoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
servitМожно узнать что в данном случае известно заранее? И в чём состоит конкретно задача: представить произвольный JSON в виде объекта, сохранить его в глобал или иное?

Задача состоит в том, чтобы однозначно восстановить JSON и поддерживать типы: null, true, false, number, string, object, array.

Да, JSON необходимо сохранить в глобал. И потом восстановить из глобала обратно в JSON.

Насколько я понял, Cache одинаково сохраняет "" и null. Как потом их восстанавливать обратно, если мы заранее не знаем тип? Мой способ предлагает сохранять тип, чтобы восстановление было бы однозначным.
...
Рейтинг: 0 / 0
25.09.2015, 12:24
    #39061152
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
jxcoderservitМожно узнать что в данном случае известно заранее? И в чём состоит конкретно задача: представить произвольный JSON в виде объекта, сохранить его в глобал или иное?

Задача состоит в том, чтобы однозначно восстановить JSON и поддерживать типы: null, true, false, number, string, object, array.

Да, JSON необходимо сохранить в глобал. И потом восстановить из глобала обратно в JSON.

Насколько я понял, Cache одинаково сохраняет "" и null. Как потом их восстанавливать обратно, если мы заранее не знаем тип? Мой способ предлагает сохранять тип, чтобы восстановление было бы однозначным. 18194269
...
Рейтинг: 0 / 0
09.10.2015, 13:11
    #39072869
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
Презентация со «Школа инноваций InterSystems – 2015» "Поддержка JSON" с бонусными слайдами про DocumentDB ( pdf )

Другие презантации можно посмотреть здесь .
...
Рейтинг: 0 / 0
28.01.2016, 16:38
    #39157701
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
jxcoderservitМожно узнать что в данном случае известно заранее? И в чём состоит конкретно задача: представить произвольный JSON в виде объекта, сохранить его в глобал или иное?Задача состоит в том, чтобы однозначно восстановить JSON и поддерживать типы: null, true, false, number, string, object, array.

Да, JSON необходимо сохранить в глобал. И потом восстановить из глобала обратно в JSON.

Насколько я понял, Cache одинаково сохраняет "" и null. Как потом их восстанавливать обратно, если мы заранее не знаем тип? Мой способ предлагает сохранять тип, чтобы восстановление было бы однозначным.При наличии доступа к 2016.2, взгляните на Caché DocDM ( Doc ument D ata M odel), в котором:
  • можно сохранять любой JSON (с сохранением типов)
  • искать данные через SQL
  • индексировать их для ускорения поиска
  • есть уже готовый REST API
...
Рейтинг: 0 / 0
04.02.2016, 14:53
    #39163018
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
Вот ещё одна из недавних статей: Introducing new JSON capabilities in Caché 2016.1
...
Рейтинг: 0 / 0
04.02.2016, 15:13
    #39163052
Шваров Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в Cache?
servitВот ещё одна из недавних статей: Introducing new JSON capabilities in Caché 2016.1

Да, очень хорошая статья.
Вообще радует, что продакт-менеджеры InterSystems взялись выпускать статьи - будут еще и, надеюсь, регулярно.

Кроме того, статьи хабра будут переводиться на портал. Первый перевод уже там.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / JSON в Cache? / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]