2016-10-22 107 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