2016-10-22 2 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. Создайте заказ LineLine.
  2. Перевести json в java-объекты (джексон или gson - два инструмента для этого, есть много других)
  3. Сортировка orderLines.
  4. Объединить дубликаты.
  5. Создание JSON из нового (объединенного) списка
0

Я предполагаю, что вы используете Talend ESB (посредническую перспективу), так что если вы знаете, как сделать это с помощью 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

Смежные вопросы