#javascript #json #postgresql
#javascript #json #postgresql
Вопрос:
Я пытаюсь сохранить объект JSON в таблице PostgreSQL. Объекты JSON, которые у меня есть, имеют структуру, подобную:
{
"$base": "Object",
"displayName": "Test_DC_CAL_78901234567890123456789012345678901234567890äöüßÄÖÜ",
"object-name": {
"$base": "String",
"value": "Test_DC_CAL_78901234567890123456789012345678901234567890äöüßÄÖÜ"
},
"object-identifier": {
"$base": "ObjectIdentifier",
"value": "calendar,701001"
},
"object-type": {
"$base": "Enumerated",
"value": "calendar"
},
"description": {
"$base": "String",
"value": "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890äöüß"
},
"date-list": {
"1": {
"$base": "Choice",
"date": {
"$base": "Choice",
"date": {
"$base": "DatePattern",
"value": "*-12-25-*"
}
}
},
"2": {
"$base": "Choice",
"date": {
"$base": "Choice",
"date": {
"$base": "DatePattern",
"value": "*-12-26-*"
}
}
},
"3": {
"$base": "Choice",
"weekNDay": {
"$base": "Sequence",
"month": {
"$base": "Enumerated",
"value": "any"
},
"weekOfMonth": {
"$base": "Enumerated",
"value": "any"
},
"dayOfWeek": {
"$base": "Enumerated",
"value": "sunday"
}
}
},
"4": {
"$base": "Choice",
"date": {
"$base": "Choice",
"date": {
"$base": "Date",
"value": "2020-10-15"
}
}
},
"5": {
"$base": "Choice",
"dateRange": {
"$base": "Sequence",
"startDate": {
"$base": "Date",
"value": "2020-10-16"
},
"endDate": {
"$base": "Date",
"value": "2020-10-17"
}
}
},
"$base": "List"
},
"present-value": {
"$base": "Boolean",
"value": "1"
}
}
Мой соединитель postgres не принимает свойства $base. Я могу удалить его, но только по свойству. Но позже мне это снова понадобится, поэтому я ищу способ переименовать его на всех уровнях свойств.
Ответ №1:
JSON.parse()
может вызываться с reviver
параметром для внесения простых изменений в дерево объектов сразу после его анализа из JSON. Переименовать все $base
ключи в _base
:
const parsed = JSON.parse(json, function (key, value) {
if (key === "$base") {
// Rename key
this._base = value;
// Drop old key
return undefined;
}
return value;
});