シナリオが出ました。
必要な入力と出力はJSONです。
// Input
{
"OldObject": {
"Time": 1351160457922,
"Name": "OName",
"quantity": 100,
"price": 10
}
}
// Output
{
"NewObject": {
"Time": 1351160457922,
"Title": "OName",
"quantity": 100
}
}
JSONをある形式から別の形式に変換するには、変換コードまたはできればxsltタイプの言語が必要です。このトランスフォーマーも変換がオンザフライで行われるため、高速である必要があります。
編集
受け取ったINPUTオブジェクトの定義がありません。実行時に変更される可能性があります。しかし、必要に応じてOUTPUTオブジェクトのクラスを使用できます。 json-> xml-> xslt-> xml-> jsonとしてこれを実行しようとしましたが、この最後に1秒あたり約1000のオブジェクトが受信され、このプロセスでオーバーヘッドが発生する可能性があります。
myAppはシンプルなのでJavaScriptも使用できませんwindows based Java applicationで、JavaScriptを使用するとオーバーヘッドが発生する可能性があります。
ZORBAとJsonIQを使用できます http://www.jsoniq.org/ ただし、これはネイティブライブラリであり、ラッパーが付属しているため、Javaで使用できます。
[〜#〜] jolt [〜#〜] を試してください。これは、Javaで記述されたJSONからJSONへの変換ライブラリです。多くのJSONをElasticSearchの「バックエンド」からフロントエンドのAPIに変換するプロジェクトで作成されました。
問題にリストしたJSON変換の場合、Joltの「シフト」仕様は次のようになります。
// 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 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);
私は提供されたものをテストしませんでしたが、そのように動作するはずです。
JSONパッチには Java実装 があります。
JavaScript JSONトランスフォーマー: https://raw.githubusercontent.com/udhayasoftware/codebase/master/standalone/javascript/TransformJSON.js
あなたは試すことができます 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();
別のオプションは、Logz.io Sawmill ライブラリを使用することです。パイプラインを定義して実行します。あなたの例:
{
steps: [
{
rename {
config {
from: "OldObject"
to: "NewObject"
}
}
}
{
removeField {
config {
path: "NewObject.price"
}
}
}
{
rename {
config {
from: "NewObject.Name"
to: "NewObject.Title"
}
}
}
]
}
Java library Silencio を試すと、JSONファイルの各ノードを新しい値に変換できます。どのノードをどのように変換するかを決定できます。