2016-10-22 4 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은 두 가지 도구입니다.
  3. ) orderLines을 정렬하십시오.
  4. 중복을 결합하십시오. 당신이 XSL이 작업을 수행하는 방법을 알고, 그래서 만약
  5. 는, 새로운 (결합) 목록
0

난 당신이 talend ESB (중재 관점)를 사용하는 가정에서 JSON을 생성,이 작업을 수행하는 가장 간단한 방법은에 아마도 cMessagingEndpoint 내에서 XSL 낙타 구성 요소를 사용하고 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

관련 문제