如何聚合json文件?

时间:2016-10-22 14:11:51

标签: java json apache-camel talend

我想聚合一个Json文件。 我使用Talend来做这个,所以我必须在java中进行这种转换。 这是订单文件。

{
"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操作。 但我不知道如何在Camel Java中做到这一点......你知道吗?

2 个答案:

答案 0 :(得分:0)

这可能不是您想要的解决方案。

  1. 创建orderLine类。
  2. 将json转换为java对象(jackson或gson是两个工具,还有很多其他工具)
  3. 对orderLines进行排序。
  4. 合并重复项。
  5. 从新(合并)列表
  6. 生成json

答案 1 :(得分:0)

我假设您正在使用talend ESB(中介透视图),因此如果您知道如何使用XSL执行此操作,最简单的方法是在cMessagingEndpoint中使用XSL camel组件,并使使用XSLT进行转换。 在cMessaging端点中,您只需使用filepath配置URI字段即可。

" XSLT:文件:// C:/temp/xslt.xslt"

然后在输入组件后链接它。