parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Создание таблиц из хэша

Mizter Egoist 25.12.2017 02:56 / 25.12.2017 04:30

Здравствуйте, хочу получить json такого вида:
{
  "name": "api-server",
  "count": 0,
  "created": "2017-12-25 02:38:47",
  "updated": "",
  "data": [{
    "email": "mail@mail.com",
    "server": "example.ru",
    "license": "63d5454c-62d0-4355-950f-0cb79396860d",
    "api": "57fec556-4e74-4654-a2c6-3f67b9be5fb9",
    "secret": "9c1f7004-8066-491e-8410-48c315e85e3f",
    "public": "0ae6f861-8faa-401b-a0dd-1e07a915a3e2"
  }]
}
этот json будет хранится в файле, data будет изменятся

чтобы сформировать такой результат делаю так:
$hash[
  $.name[$table]
  $.count(0)
  $.created[$self.options.server.time]
  $.updated[]
  $.data[$options.data]
]
$build[^json:string[$hash;$.indent(true)]]
$db[^file::create[binary;$table;$build]]
^db.save[binary;${path}/^math:md5[$table]]
но так у меня получается такая структура:
{
  "name": "api-server",
  "count": 0,
  "created": "2017-12-25 02:38:47",
  "updated": "",
  "data": {
    "email": "mail@mail.com",
    "server": "example.ru",
    "license": "63d5454c-62d0-4355-950f-0cb79396860d",
    "api": "57fec556-4e74-4654-a2c6-3f67b9be5fb9",
    "secret": "9c1f7004-8066-491e-8410-48c315e85e3f",
    "public": "0ae6f861-8faa-401b-a0dd-1e07a915a3e2"
  }
}
при этом заранее неизвестно какая будет структура внутри data, названия могут быть разные и со временем дополнятся.

Необходимо заключить data в квадратные скобки для последующего перебора и поиска внутри data по значениям.

Пробовал:
$data[^table::create{^options.data.foreach[name;value]{$name}[	]}]
^data.append[$options.data]
$hash[
	$.name[$table]
	$.count(0)
	$.created[$self.options.server.time]
	$.updated[]
	$.data[^data.foreach[;value]{^self.to_safe[^json:string[$value;$.indent(true)]]}[, ]]
]
$build[^json:string[$hash;
	$.indent(true)
	$.table[array]
]]
$db[^file::create[binary;$table;^taint[$build]]]
^db.save[binary;${path}/^math:md5[$table]]

@to_safe[result][locals]
$replace[^table::create[nameless]{
\	
^taint[^#09]
^taint[^#0A]}]
$result[^result.replace[$replace]]
тогда в результате получается такой вид:
{
  "name": "api-server",
  "count": 0,
  "created": "2017-12-25 04:23:48",
  "updated": "",
  "data": "[{\"email\":\"mail@mail.com\",\"server\":\"example.ru\",\"license\":\"2d4c7280-be97-439e-b685-e7fff67934c1\",\"api\":\"8ada29a0-2437-4a2f-9ed1-38f1e629e08a\",\"secret\":\"59dab8de-679e-4b86-b1cc-bc311ea1a4ac\",\"public\":\"e9ff3257-f832-4dc5-91e7-eeb3826fff8d\"}]"
}