Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / JSON в глобалы / 17 сообщений из 17, страница 1 из 1
22.10.2015, 08:00
    #39083009
kassman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
Здравствуйте!Есть данные в 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
22.10.2015, 08:15
    #39083014
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
kassmanЕсть данные в json
Это не json...
...
Рейтинг: 0 / 0
22.10.2015, 08:22
    #39083016
kassman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
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
22.10.2015, 08:45
    #39083023
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
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
22.10.2015, 09:00
    #39083030
kassman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
krvsa,спасибо)очень помогли:)
...
Рейтинг: 0 / 0
22.10.2015, 10:39
    #39083142
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
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
22.10.2015, 10:52
    #39083166
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
krvsa ,

Если значение само содержит кавычки, например '''111a''' вместо '111a' или ^global('1') вместо ^global(1), то код перестаёт правильно работать.
...
Рейтинг: 0 / 0
22.10.2015, 11:16
    #39083203
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
Кроме того нужно ещё учитывать наличие escape-последовательности в строках : например, строка '' должна преобразовываться в символ $c(0).
...
Рейтинг: 0 / 0
22.10.2015, 11:29
    #39083219
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
servitЕсли значение ...
Код был написан под тот пример, что дал ТС и не более того...
...
Рейтинг: 0 / 0
22.10.2015, 11:31
    #39083221
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
servitКроме того нужно ещё учитывать ...
krvsaкак иллюстрация...
Я х/з как еще объяснить...
...
Рейтинг: 0 / 0
23.10.2015, 06:59
    #39084244
kassman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
servit,
Cпасибо за Ваши варианты
...
Рейтинг: 0 / 0
28.01.2016, 13:06
    #39157387
kassman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
servit,Здравствуйте
Какой формат json вы имели ввиду?
...
Рейтинг: 0 / 0
28.01.2016, 16:15
    #39157680
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
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
29.01.2016, 11:33
    #39158333
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
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
29.01.2016, 11:45
    #39158350
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
Alexey MaslovЭто сломает предложенный JSON-формат?Нет, это потребует всего лишь доработки (усложнения (замедления)) кода для таких случаев. Вопрос, а надо ли ТС это ...
...
Рейтинг: 0 / 0
01.02.2016, 06:20
    #39159728
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
Я может быть, скажу глупую, тривиальную вещь, причем излишне самоуверенно.
Но зачем вы думаете о том, как отобразить глобалы в JSON? Нужно думать о том, как отобразить глобалы в объекты, а уже объект без проблем отобразится в JSON.
...
Рейтинг: 0 / 0
01.02.2016, 09:29
    #39159791
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON в глобалы
Блок А.Н.Но зачем вы думаете о том, как отобразить глобалы в JSON? Нужно думать о том, как отобразить глобалы в объекты, а уже объект без проблем отобразится в JSON.Может быть потому, что изначально проект делался(ется) не под Caché (GlobalsDB, GT.M, др.), в которых объектов нет (или потенциально может не быть)?
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / JSON в глобалы / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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