web-dev-qa-db-ja.com

JSONからJSONへのトランスフォーマー

シナリオが出ました。

必要な入力と出力は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を使用するとオーバーヘッドが発生する可能性があります。

26

ZORBAとJsonIQを使用できます http://www.jsoniq.org/ ただし、これはネイティブライブラリであり、ラッパーが付属しているため、Javaで使用できます。

5
mvallebr

[〜#〜] 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"
    }
}
20
Milo S

この変換は 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実装 があります。

12
KARASZI István
1
Udhaya

あなたは試すことができます 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();
1
Anton Straka

別のオプションは、Logz.io Sawmill ライブラリを使用することです。パイプラインを定義して実行します。あなたの例:

{
  steps: [
    {
      rename {
         config {
            from: "OldObject"
            to: "NewObject"
         }
      }
    }

    {
      removeField {
        config {
          path: "NewObject.price"
        }
      }
    }

    {
      rename {
        config {
          from: "NewObject.Name"
          to: "NewObject.Title"
        }
      }
    }
  ]
}
1
Asaf Mesika

Java library Silencio を試すと、JSONファイルの各ノードを新しい値に変換できます。どのノードをどのように変換するかを決定できます。

0
Damian