У меня есть сценарий.
Требуемый ввод и вывод: JSON.
// Input
{
"OldObject": {
"Time": 1351160457922,
"Name": "OName",
"quantity": 100,
"price": 10
}
}
// Output
{
"NewObject": {
"Time": 1351160457922,
"Title": "OName",
"quantity": 100
}
}
Мне нужен код преобразования или предпочтительно язык типа xslt для преобразования json из одного формата в другой. Этот трансформатор также должен быть быстрым, поскольку трансформация будет выполняться "на лету".
Edit
У меня нет определения принимаемого объекта INPUT, и он может измениться во время выполнения. но я могу использовать класс для объекта OUTPUT, если это необходимо.
Я попытался сделать это как json → xml → xslt → xml → json, но с этой целью получено 1000 объектов в секунду, и этот процесс может повлечь накладные расходы.
Я также не могу использовать JavaScript, поскольку myApp - это простое приложение на основе java-приложений на основе Windows, и использование JavaScript может вызвать накладные расходы.
Ответ 1
Вы можете использовать ZORBA и JsonIQ http://www.jsoniq.org/ Однако, это нативная библиотека, она поставляется с оберткой, поэтому вы можете использовать ее в Java.
Ответ 2
Попробуйте JOLT. Это библиотека преобразования JSON для JSON, написанная на Java. Он был создан в проекте, который преобразовывал много JSON из бэкэнда ElasticSearch в интерфейс api.
Для преобразования JSON, которое вы указали в своей проблеме, спецификация смещения Jolt:
// Jolt "shift" spec
{
"OldObject": {
"Time": "NewObject.Time",
"Name": "NewObject.Title", // if the input has "OldObject.Name", copy it value
// to "NewObject.Title
"quantity": "NewObject.quantity"
}
}
Ответ 3
Вы можете сделать это преобразование с помощью патча JSON.
Пример с jsonpatch-js:
var transformations = [
{ move: '/OldObject', to: '/NewObject' },
{ remove: '/NewObject/price' },
{ move: '/NewObject/Name', to: '/NewObject/Title' }
];
var oldObject = { "OldObject": { "Time": 1351160457922, "Name": "OName", "quantity": 100, "price": 10 } };
jsonpatch.apply(oldObject, transformations);
Я не проверял предоставленное, но должно работать так.
Существуют реализации Java для патча JSON:
Ответ 4
Javascript JSON Transformer:
https://raw.githubusercontent.com/udhayasoftware/codebase/master/standalone/javascript/TransformJSON.js
Ответ 5
Другой вариант - использовать библиотеку Logz.io Sawmill. Вы определяете конвейер и выполняете его. Для вас пример:
{
steps: [
{
rename {
config {
from: "OldObject"
to: "NewObject"
}
}
}
{
removeField {
config {
path: "NewObject.price"
}
}
}
{
rename {
config {
from: "NewObject.Name"
to: "NewObject.Title"
}
}
}
]
}
Ответ 6
Вы можете попробовать Java-библиотеку Silencio, которая позволяет конвертировать каждый node файла JSON в новые значения. Вы можете решить, какие и как следует преобразовывать узлы.