2016-10-22 13 views
0

Jsonファイルを集計したいと思います。 私はこれを行うためにTalendを使用するので、私はこの変換をjavaで行う必要があります。 注文ファイルです。jsonファイルを集計する方法は?

{ 
"order" : [{ 
     "order_line" : { 
      "name" : "Pains au lait aux pépites de chocolat, 350 g", 
      "unit_price" : 2.39, 
      "ean" : "3256540011465", 
      "price" : 4.78, 
      "quantity" : 2, 
      "date" : "-0001-11-30T00:00:00+0009", 
      "ref" : "23806" 
     } 
    }, { 
     "order_line" : { 
      "name" : "Eau de montagne, 6 x 1.5 L", 
      "unit_price" : 1.99, 
      "ean" : "3596710383931", 
      "price" : 1.99, 
      "quantity" : 1, 
      "date" : "-0001-11-30T00:00:00+0009", 
      "ref" : "117797" 
     } 
    }, { 
     "order_line" : { 
      "name" : "Eau de montagne, 6 x 1.5 L", 
      "unit_price" : 1.99, 
      "ean" : "3596710383931", 
      "price" : 1.99, 
      "quantity" : 1, 
      "date" : "-0001-11-30T00:00:00+0009", 
      "ref" : "117797" 
     } 
    }, { 
     "order_line" : { 
      "name" : "Pains au lait aux pépites de chocolat, 350 g", 
      "unit_price" : 2.39, 
      "ean" : "3256540011465", 
      "price" : 4.78, 
      "quantity" : 2, 
      "date" : "-0001-11-30T00:00:00+0009", 
      "ref" : "23806" 
     } 
    } 
] 
} 

私のファイルには、順序通りの項目が含まれていますが、重複しています。

タグ "name"、 "ean"、 "ref"、 "unit_price"が同じ場合、同じ「order_line」に数量を追加し、「order_line」を重複して削除します。

そして、私はこれをしたいが:

{ 
"order" : [{ 
     "order_line" : { 
      "name" : "Pains au lait aux pépites de chocolat, 350 g", 
      "unit_price" : 2.39, 
      "ean" : "3256540011465", 
      "price" : 4.78, 
      "quantity" : 4, 
      "date" : "-0001-11-30T00:00:00+0009", 
      "ref" : "23806" 
     } 
    }, { 
     "order_line" : { 
      "name" : "Eau de montagne, 6 x 1.5 L", 
      "unit_price" : 1.99, 
      "ean" : "3596710383931", 
      "price" : 1.99, 
      "quantity" : 2, 
      "date" : "-0001-11-30T00:00:00+0009", 
      "ref_fo" : "117797" 
     } 
    } 
] 
} 

私はXSLとXMLで行う方法を知っています。 しかし、私はキャメルジャワでこれを行う方法を知らない...あなたは何か考えていますか?

+0

jsonPathをご覧ください。 –

+0

これはTalendを使って以下のようにすることができます:jsonを読んで、追加したいフィールドにtAggregateを使って、その後JSONをプリントアウトしてください。 – tobi6

答えて

0

これはあなたが望む解決策ではないかもしれません。

  1. orderLineクラスを作成します。
  2. jsonをJavaオブジェクトに変換します(jacksonまたはgsonは2つのツールです)
  3. orderLinesをソートします。
  4. 重複を組み合わせる。あなたはXSLでこれを行う方法を知っているので、もし
  5. は、新しい(組み合わせ)リスト
0

私はあなたが才能ESB(調停の視点)を使用していると仮定からJSONを生成し、これを実行する最も簡単な方法は、に多分ありますcMessagingEndpoint内にXSLのラクダコンポーネントを使用し、XSLTを使用して変換を行います。 cMessagingエンドポイントでは、URIフィールドにファイルパスを設定するだけで済みます。

"XSLT:ファイル:// C:/temp/xslt.xslt"

は、その後、あなたの入力コンポーネントの後にそれをリンクします。

+0

お返事ありがとうございます。はい、Talend ESBですが、Jsonファイルです。 Jsonでこれを行う方法? – Marisa

+0

JOLTのFortelコンポーネントがあります。これは、XSLTの場合と同等のhttps://camel.apache.org/jolt.htmlです。私は決してJOLTを使用しませんでしたが、あなたの場合には役立つかもしれません – Corentin

関連する問題