powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / JSON в глобалы
17 сообщений из 17, страница 1 из 1
JSON в глобалы
    #39083009
kassman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!Есть данные в json
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
                '^global(1)' : {
			'^global(1,1)' : {
				'^global(1,1,1)' : '111a'
			}
		},
		'^global(2)' : {
			'^global(2,1)' : {
				'^global(2,1,1)' : '211a',
				'^global(2,1,2)' : '212a'
			},
			'^global(2,2)' : {
				'^global(2,2,1)' : '221a',	
				'^global(2,2,2)' : '222a',
				'^global(2,2,3)' :
				{
					'^global(2,2,3,1)' :
					{
						'^global(2,2,3,1,1)' : '22311a'
					}
				}
			}
		}


Нужно данные записать в глобал ^global.Чтобы результат был таким
Глобал
1: ^global(1) = ""
2: ^global(1,1) = ""
3: ^global(1,1,1) = ""
4: ^global(1,1,1,1) = "1111a"
5: ^global(1,2) = "12a"
6: ^global(1,3) = ""
7: ^global(1,3,1) = "131a"
8: ^global(2) = ""
9: ^global(2,1) = ""
10: ^global(2,1,1) = "211a"
11: ^global(2,1,2) = "212a"
12: ^global(2,2) = ""
13: ^global(2,2,1) = "221a"
14: ^global(2,2,2) = "222a"
15: ^global(2,2,3) = ""
16: ^global(2,2,3,1) = "2231a"

Как это можно реализовать?
...
Рейтинг: 0 / 0
JSON в глобалы
    #39083014
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kassmanЕсть данные в json
Это не json...
...
Рейтинг: 0 / 0
JSON в глобалы
    #39083016
kassman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,var globalObj = {
       '^global(1)' : {
      '^global(1,1)' : {
        '^global(1,1,1)' : '111a'
      }
    },
    '^global(2)' : {
      '^global(2,1)' : {
        '^global(2,1,1)' : '211a',
        '^global(2,1,2)' : '212a'
      },
      '^global(2,2)' : {
        '^global(2,2,1)' : '221a',  
        '^global(2,2,2)' : '222a',
        '^global(2,2,3)' :
        {
          '^global(2,2,3,1)' :
          {
            '^global(2,2,3,1,1)' : '22311a'
          }
        }
      }
    }
}
...
Рейтинг: 0 / 0
JSON в глобалы
    #39083023
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kassman , как иллюстрация...  n
  s pos=1
  s str="'^global(1)':{'^global(1,1)':{'^global(1,1,1)':'111a'}},'^global(2)':{'^global(2,1)':{'^global(2,1,1)':'211a','^global(2,1,2)':'212a'},'^global(2,2)':{'^global(2,2,1)':'221a','^global(2,2,2)':'222a','^global(2,2,3)':{'^global(2,2,3,1)':{'^global(2,2,3,1,1)':'22311a'}}}}"
  do {
    s name=""
    s pos=$locate(str,"\^[a-z()\d,]+",pos,,name)
    s len=$l(name)
    if $i(pos,len)
    if name'="" {
      s value=""
      if $locate(str,":[\s\S]+?(?=')",pos,,value) 
      s value=$s(value=":{":"",1:$e(value,3,*))
      w !
      zw name,value
      // s @name=value
    }
  } while len
  q
...
Рейтинг: 0 / 0
JSON в глобалы
    #39083030
kassman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,спасибо)очень помогли:)
...
Рейтинг: 0 / 0
JSON в глобалы
    #39083142
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kassman ,

Вы не указали версию ($zv), поэтому привожу два варианта:
>=2015.3  s obj = {
    "^global(1)" : {
      "^global(1,1)" : {
        "^global(1,1,1)" : "111a"
      }
    },
    "^global(2)" : {
      "^global(2,1)" : {
        "^global(2,1,1)" : "211a",
        "^global(2,1,2)" : "212a"
      },
      "^global(2,2)" : {
        "^global(2,2,1)" : "221a",  
        "^global(2,2,2)" : "222a",
        "^global(2,2,3)" :
        {
          "^global(2,2,3,1)" :
          {
            "^global(2,2,3,1,1)" : "22311a"
          }
        }
      }
    }
  }
 
 d tree(obj)

tree(obj) {
  s iter = obj.$getIterator()
  while iter.$getNext(.key,.value ) {
    i obj.$getTypeOf(key)="object" {
      w "name = "_key_", value = ",!
      d tree(value)
    }else {
      w "name = "_key_", value = "_value,!
    }
  } 
}
<2015.3  d ##class(%ZEN.Auxiliary.jsonProvider).%ParseJSON("{""^global(1)"":{""^global(1,1)"":{""^global(1,1,1)"":""111a""}},""^global(2)"":{""^global(2,1)"":{""^global(2,1,1)"":""211a"",""^global(2,1,2)"":""212a""},""^global(2,2)"":{""^global(2,2,1)"":""221a"",""^global(2,2,2)"":""222a"",""^global(2,2,3)"":{""^global(2,2,3,1)"":{""^global(2,2,3,1,1)"":""22311a""}}}}}",,.obj)
  d tree(obj,"")

tree(obj,name) {
  s key = $o(obj.%data(name))
  while (key '= "") {
    s value=$g(obj.%data(key))
    i $IsObject(value),value.%IsA("%ZEN.proxyObject") {
      w "name = "_key_", value = ",!
      d tree(value,"")
    }else {
      w "name = "_key_", value = "_value,!
    }
    s key = $o(obj.%data(key))
  }
}

PS: я бы задумался над другим форматом JSON представления глобала, чем у Вас.
...
Рейтинг: 0 / 0
JSON в глобалы
    #39083166
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa ,

Если значение само содержит кавычки, например '''111a''' вместо '111a' или ^global('1') вместо ^global(1), то код перестаёт правильно работать.
...
Рейтинг: 0 / 0
JSON в глобалы
    #39083203
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме того нужно ещё учитывать наличие escape-последовательности в строках : например, строка '' должна преобразовываться в символ $c(0).
...
Рейтинг: 0 / 0
JSON в глобалы
    #39083219
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitЕсли значение ...
Код был написан под тот пример, что дал ТС и не более того...
...
Рейтинг: 0 / 0
JSON в глобалы
    #39083221
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitКроме того нужно ещё учитывать ...
krvsaкак иллюстрация...
Я х/з как еще объяснить...
...
Рейтинг: 0 / 0
JSON в глобалы
    #39084244
kassman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,
Cпасибо за Ваши варианты
...
Рейтинг: 0 / 0
JSON в глобалы
    #39157387
kassman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,Здравствуйте
Какой формат json вы имели ввиду?
...
Рейтинг: 0 / 0
JSON в глобалы
    #39157680
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kassmanservit,Здравствуйте
Какой формат 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.
  s obj = {
    "name": "^global",
    "nodes":
    [
      ["1"],
      ["1,1"],
      ["1,1,1","111a"],
      ["2"],
      ["2,1"],
      ["2,1,1","211a"],
      ["2,1,2","212a"],
      ["2,2"],
      ["2,2,1","221a"],
      ["2,2,2","222a"],
      ["2,2,3"],
      ["2,2,3,1"],
      ["2,2,3,1,1","22311a"]
    ]
  }

  d save(obj)

save(obj) {
  s name = obj.name
  s iter = obj.nodes.$getIterator()

  k @name
  
  while iter.$getNext(, .node) {
    s @(name_"("_node.$get(0)_")") = node.$get(1)
  }
  
  zw @name
}

Результат:
USER>d ^test
^global(1)=""
^global(1,1)=""
^global(1,1,1)="111a"
^global(2)=""
^global(2,1)=""
^global(2,1,1)="211a"
^global(2,1,2)="212a"
^global(2,2)=""
^global(2,2,1)="221a"
^global(2,2,2)="222a"
^global(2,2,3)=""
^global(2,2,3,1)=""
^global(2,2,3,1,1)="22311a"
Формат подходит и для списков, например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  s obj = {
    "name": "^global",
    "nodes":
    [
      ["1,1,1",["111a","111b"]]
    ]
  }

  
d save(obj)

save(obj) {
  s name = obj.name
  s iter = obj.nodes.$getIterator()

  k @name
  
  while iter.$getNext(, .node) {
    s values = ""

    s valuesIter = node.$get(1).$getIterator()
    while valuesIter.$getNext(, .v) {
      s $li(values, *+1) = v
    }
    
    s @(name_"("_node.$get(0)_")") = values
    
  }
  
  zw @name
}

Результат:
USER>d ^test
^global(1,1,1)=$lb("111a","111b")
PS: надеюсь, случаи вида
Код: plaintext
^global($lb(1),1,$lb(1,$lb(1)))=$lb($lb($lb(1),1,$lb(1,$lb(1)),"a"),$lb($lb(1),1,$lb(1,$lb(1)),"b"))
Вы не рассматриваете?

PPS: при наличии доступа к 2016.2, взгляните на Caché DocDM ( Doc ument D ata M odel).
...
Рейтинг: 0 / 0
JSON в глобалы
    #39158333
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitPS: надеюсь, случаи вида
Код: plaintext
^global($lb(1),1,$lb(1,$lb(1)))=$lb($lb($lb(1),1,$lb(1,$lb(1)),"a"),$lb($lb(1),1,$lb(1,$lb(1)),"b"))
Вы не рассматриваете?Что особенного в данной конструкции? В индексах глобалов разрешены любые символы, ничто не мешает некоему индексу случайно оказаться списком по формату. Это сломает предложенный JSON-формат?
...
Рейтинг: 0 / 0
JSON в глобалы
    #39158350
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey MaslovЭто сломает предложенный JSON-формат?Нет, это потребует всего лишь доработки (усложнения (замедления)) кода для таких случаев. Вопрос, а надо ли ТС это ...
...
Рейтинг: 0 / 0
JSON в глобалы
    #39159728
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я может быть, скажу глупую, тривиальную вещь, причем излишне самоуверенно.
Но зачем вы думаете о том, как отобразить глобалы в JSON? Нужно думать о том, как отобразить глобалы в объекты, а уже объект без проблем отобразится в JSON.
...
Рейтинг: 0 / 0
JSON в глобалы
    #39159791
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Но зачем вы думаете о том, как отобразить глобалы в JSON? Нужно думать о том, как отобразить глобалы в объекты, а уже объект без проблем отобразится в JSON.Может быть потому, что изначально проект делался(ется) не под Caché (GlobalsDB, GT.M, др.), в которых объектов нет (или потенциально может не быть)?
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / JSON в глобалы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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