2016-10-22 106 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" 
     } 
    } 
] 
} 

我知道如何在XML做XSL。 但我不知道如何在Camel Java中做到這一點...你有什麼想法嗎?

+0

看看jsonPath。 –

+0

你可以像這樣用Talend實現這個目標:閱讀json,在你想添加的字段上使用tAggregate,然後打印出JSON。 – tobi6

回答

0

這可能不是您想要的解決方案。

  1. 創建一個orderLine類。
  2. 將json轉換爲java對象(jackson或gson是兩個工具,還有很多其他工具)
  3. 對orderLines進行排序。
  4. 合併重複項。
  5. 新(合併)名單
0

我假設你使用了Talend ESB(調解角度)生成JSON,所以如果你知道如何使用XSL做到這一點,要做到這一點最簡單的方法也許是使用XSL駝峯組件在cMessagingEndpoint中,並使用XSLT進行轉換。 在cMessaging端點中,您可以使用文件路徑配置URI字段。

「XSLT:文件:// C:/temp/xslt.xslt」

然後你輸入組件後,將其鏈接。

+0

謝謝你的回答。是的,它是Talend ESB,但它是Json文件。 如何用Json做到這一點? – Marisa

+0

JOLT中有一個駱駝組件,它似乎與XSLT相當:https://camel.apache.org/jolt.html。我從來沒有使用JOLT,但它可能對您的情況有用 – Corentin