Я пытаюсь создать универсальную функцию в javascript, которая преобразует структуру данных json в OSC совместимый формат.OSC означает '/' разделенные адресные строки, присвоенные аргументам любого типа.
Вложенный json, подобный этому:
{
"hello":"world",
"one":{
"two":{
"three":[4, 5, 6, 7]
},
"deux":"trois",
"zwei":3
}
}
приведет к:
[
{
"addr":"/hello",
"args":"world"
},
{
"addr":"/one/two/three",
"args":[4, 5, 6, 7]
},
{
"addr":"/one/deux",
"args":"trois"
},
{
"addr":"/one/zwei",
"args":3
},
]
IЯ не фанат рекурсивных функций, но я подумал, что это единственный путь, поэтому я придумал это:
example = {
"hello":"world",
"one":{
"two":{
"three":[4, 5, 6, 7]
},
"deux":"trois",
"zwei":3
}
}
toOSC(example)
function toOSC(json) {
var osc_msg = [{address:""}]
createPath(json, osc_msg,0,"")
for(let o of osc_msg) {
if(o.hasOwnProperty('args')) {
console.log(o)
}
}
}
function createPath(obj, osc_msg, i, addr) {
for(let m in obj) {
osc_msg[i]['address'] += '/' + m
if(Array.isArray(obj[m]) || typeof obj[m] !== 'object') {
osc_msg[i]['args'] = obj[m]
i++
osc_msg.push({address:""})
} else {
i = createPath(obj[m], osc_msg, i, osc_msg[i].address)
i++
osc_msg.push({address:addr})
}
}
return i
}
Код не работает таким образом, что второй из двух вложенных объектов одинаковой глубины избавляется от первой части своего адреса и Iя не могу обдумать это.
Я рад любой идее, также касающейся общего подхода к преобразованию json в формат, совместимый с OSC.
Я хочу использовать преобразование дляотправка сообщений с пакетом node.js osc-min .