我有一个场景。
所需的输入和输出是JSON。
// Input
{
"OldObject": {
"Time": 1351160457922,
"Name": "OName",
"quantity": 100,
"price": 10
}
}
// Output
{
"NewObject": {
"Time": 1351160457922,
"Title": "OName",
"quantity": 100
}
}
我需要一些变换代码或优选XSLT类型的语言从一种格式变换JSON到另一个。 该变压器也需要快,转型将在飞行中完成。
编辑
我没有收到输入对象的定义,它可能会在运行时更改。 但如果需要,我可以使用类的输出对象。 我试图这样做,因为JSON - > XML - > XSLT - > XML - > JSON,但大约1000个对象在为此每秒接收的,这个过程可能会招致的开销。
我也无法使用JavaScript作为对myApp是简单的基于Windows的Java应用程序和使用JavaScript可能会导致开销。
您可以使用左巴和JsonIQ http://www.jsoniq.org/然而,这是一个机库,它带有一个包装,所以你可以在Java中使用它。
尝试JOLT 。 这是一个JSON以JSON转换库用Java编写的。 它是在一个从一个ElasticSearch“后端”的前端API转化不少JSON的项目创建。
对于JSON变换你已经在你的问题中列出,颠簸“转移”规范是:
// Jolt "shift" spec
{
"OldObject": {
"Time": "NewObject.Time",
"Name": "NewObject.Title", // if the input has "OldObject.Name", copy it's value
// to "NewObject.Title
"quantity": "NewObject.quantity"
}
}
为此,您可以用转换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);
我没有测试这一点,但应该像这样工作。
JavaScript的JSON变压器: https://raw.githubusercontent.com/udhayasoftware/codebase/master/standalone/javascript/TransformJSON.js
另一种选择是使用Logz.io 锯木厂库。 你定义一个管道,并执行它。 对于您例如:
{
steps: [
{
rename {
config {
from: "OldObject"
to: "NewObject"
}
}
}
{
removeField {
config {
path: "NewObject.price"
}
}
}
{
rename {
config {
from: "NewObject.Name"
to: "NewObject.Title"
}
}
}
]
}
您可以尝试Java库锡伦西奥 ,让您的JSON文件的每个节点转换成新的值。 你可以决定如何节点应该转变。