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

Вадим
...
Рейтинг: 0 / 0
JSON в Cache?
    #36612391
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё здесь посмотрите: Zen JSON Component
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
JSON в Cache?
    #38886297
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то изменилось в каше?
Сейчас можно не используя ZEN принимать и передавать объекты в JSON формате наподобие того, как это можно сделать с XML с помощью %XML.Adaptor, %XML.Reader, %XML.Writer?
...
Рейтинг: 0 / 0
JSON в Cache?
    #38886321
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... ну как минимум нужные классы все равно находятся в пакете %ZEN. Сейчас надо поискать те, которые можно использовать без ZEN.
...
Рейтинг: 0 / 0
JSON в Cache?
    #38886327
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... например, %ZEN.Auxiliary.jsonProvider
...
Рейтинг: 0 / 0
JSON в Cache?
    #38886332
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.... ну как минимум нужные классы все равно находятся в пакете %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
JSON в Cache?
    #38886468
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, я нашел решение, спасибо.
Из-за того, что класс в ZEN, искать пришлось дольше.
Но я хитрый, искал через
select * from %dictionary.methoddefinition where upper(id) like '%JSON%'
...
Рейтинг: 0 / 0
JSON в Cache?
    #38888348
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н, еще json.m по ссылке c json.org :)
...
Рейтинг: 0 / 0
JSON в Cache?
    #38889036
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще 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
JSON в Cache?
    #38889340
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jxcoder, зачем тип?
...
Рейтинг: 0 / 0
JSON в Cache?
    #38890160
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint,

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

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

Ну если взять произвольный JSON, то как быть?
...
Рейтинг: 0 / 0
JSON в Cache?
    #38890749
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
JSON в Cache?
    #38890763
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

В данном случае заранее известно как его надо парсить.
...
Рейтинг: 0 / 0
JSON в Cache?
    #38890785
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
JSON в Cache?
    #38899353
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitМожно узнать что в данном случае известно заранее? И в чём состоит конкретно задача: представить произвольный JSON в виде объекта, сохранить его в глобал или иное?

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

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

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

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

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

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

Другие презантации можно посмотреть здесь .
...
Рейтинг: 0 / 0
JSON в Cache?
    #39157701
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
JSON в Cache?
    #39163018
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот ещё одна из недавних статей: Introducing new JSON capabilities in Caché 2016.1
...
Рейтинг: 0 / 0
JSON в Cache?
    #39163052
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitВот ещё одна из недавних статей: Introducing new JSON capabilities in Caché 2016.1

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

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


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