parser

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

 

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

Небольшой вопрос про hash и foreach

Mizter Egoist 05.06.2017 17:37

Здравствуйте.

Есть хэш такого вида:
"attr":{
	"1ebded6a":{
		"name":"awd",
		"type":"1",
		"arr":{
			"0":{ "name":"zsc", "value":"11" },
			"1":{ "name":"fgh", "value":"22" }
		}
	},
	"f37215e2":{
		"name":"qe2",
		"type":"1",
		"arr":{
			"0":{ "name":"qewd", "value":"22" },
			"1":{ "name":"tyut", "value":"33" }
		}
	}
}
Задача записать в таблицу БД в таком формате:
name	type	arr
awd	1	[{"name": "zsc", "value": "11"}, {"name": "fgh", "value": "22"}]
qe2	1	[{"name": "qewd", "value": "22"}, {"name": "tyut", "value": "33"}]
Пробовал вот так:
$_table[^table::create{name	type	arr}]
^if(def $_hash.attr){
	^_hash.attr.foreach[;attr]{
		^_table.append[$attr]
	}
}
или так:
^if(def $_hash.attr){
	^_hash.attr.foreach[;attr]{
		^_table.append[^hash::create[
			^attr.fields.foreach[key;value]{
				$.$key[$value]
			}
		]]
	}
}
Проблема в том, что поле arr является хэшем, соответственно не записывается.
Если создавать таблицу под arr:
$_table[^table::create{name	value}]
^if(def $_hash.attr){
	^_hash.attr.foreach[;attr]{
		^attr.arr.foreach[;value]{
			^_table.append[$value]
		}
	}
}
То в нее записывается все разом: [ {"name":"zsc","value":"11"}, {"name":"fgh","value":"22"}, {"name":"qewd","value":"22"}, {"name":"tyut","value":"33"} ]

Как мне лучше действовать, чтобы получить желаемый результат?