我有一个场景。
必需的输入和输出是JSON。
// Input
{
"OldObject": {
"Time": 1351160457922,
"Name": "OName",
"quantity": 100,
"price": 10
}
}
// Output
{
"NewObject": {
"Time": 1351160457922,
"Title": "OName",
"quantity": 100
}
}
我需要一些转换代码或最好是xslt类型语言来将json从一种格式转换为另一种格式。这个变压器也需要快速,因为转换将在运行中完成。
的修改
我没有接收到的INPUT对象的定义,它可能在运行时更改。但如果需要,我可以使用OUTPUT对象的类。
我试图这样做 json - > xml - > xslt - > xml - > json ,但此时每秒收到大约1000个对象,这个过程可能会产生开销
我不能使用JavaScript,因为myApp是简单的基于Windows的java应用程序,使用JavaScript可能会导致开销。
答案 0 :(得分:19)
试试JOLT。它是用Java编写的JSON to JSON转换库。它是在一个项目中创建的,该项目将大量JSON从ElasticSearch“后端”转换为前端api。
对于您在问题中列出的JSON转换,Jolt“shift”规范将是:
// 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"
}
}
答案 1 :(得分:10)
您可以使用JSON patch进行转换。
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);
我没有对此进行测试,但应该像这样工作。
答案 2 :(得分:5)
您可以使用ZORBA和JsonIQ http://www.jsoniq.org/ 但是,它是一个本机库,它带有一个包装器,因此您可以在java中使用它。
答案 3 :(得分:1)
Javascript JSON Transformer: https://raw.githubusercontent.com/udhayasoftware/codebase/master/standalone/javascript/TransformJSON.js
答案 4 :(得分:1)
另一个选择是使用Logz.io Sawmill库。您定义管道并执行它。例如:
{
steps: [
{
rename {
config {
from: "OldObject"
to: "NewObject"
}
}
}
{
removeField {
config {
path: "NewObject.price"
}
}
}
{
rename {
config {
from: "NewObject.Name"
to: "NewObject.Title"
}
}
}
]
}
答案 5 :(得分:1)
您可以尝试jmom一个小的Java库
String jsonstring = "...";
JsonValue json = JsonParser.parse(jsonstring);
Jmom jmom = Jmom.instance()
.copy("/OldObject", "/NewObject", true)
.remove("/NewObject/price")
.copy("/NewObject/Name", "/NewObject/Title", true);
jmom.apply(json);
jsonstring = json.toCompactString();
答案 6 :(得分:0)
您可以尝试Java库Silencio,它允许您将JSON文件的每个节点转换为新值。您可以决定转换节点的方式和方式。