2016-10-11 10 views
0

JSONArrayをJsonPathExpressionで分割しましたが、結果は各JSONの二重引用符をすべて削除しました。ここに私のRouteBuilderがあります。Apache Camel split JSONArrayは二重引用符を削除します

from("timer:scheduler?repeatCount=1") 
    .to("http:localhost:8901/rest/getData") 
     .split(new JsonPathExpression("$.[*]")) 
     .process(new Processor() { 
      @java.lang.Override 
      public void process(Exchange exchange) throws Exception { 
       String input = exchange.getIn().getBody(String.class); 
       exchange.getIn().setBody(input); 
      } 
     }) 
     .unmarshal().json(JsonLibrary.Jackson, Map.class) 
    .log("${body}"); 

私はちょうどジャクソンを使用してこれらのJSONを非整列化したいのですが、あなたが知っているかもしれないとして、ジャクソンは二重引用符なしでそれらのJSONの解析を行いません、はい、私はジャクソンが二重引用符なしで解析することが可能かもしれませんが、私はJSONを好みますそれを持っている。また、:=に変更します。

REST呼び出しの応答は次のとおりです。

[ 
    { 
    "v_KDKANWIL": null, 
    "v_GJJ": "CRJ" 
    }, 
    { 
    "v_KDKANWIL": "002", 
    "v_GJJ": "CRJ" 
    } 
] 

分割して処理した後は、最初のJSONと同じようになります。

{ 
    v_KDKANWIL=null, 
    v_GJJ=CRJ 
} 

私は文字列型を使用して新しいボディを設定しているので、スプリットだけでなくプロセッサでも疑わしいです。

ありがとうございます。

EDIT

ああ、愚かな私は、文字列が、地図ので、これではありません。

String input = exchange.getIn().getBody(String.class); 

になります。

Map input = exchange.getIn().getBody(String.class); 

答えて

0
`.split()` splits data into java.util.map. Marshal data after split to convert it to JSON using Jackson or Gson. I faced the same issue and adding `marshal()` resolved the issue. 

.marshal().json(JsonLibrary.Jackson) 
+0

いくつかの即時の支援を提供することができる、このコードスニペットをいただき、ありがとうございます。適切な説明は、なぜこれが問題の良い解決策であるのかを示すことによって、その教育的価値を大幅に向上させるでしょう(https://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)。類似しているが同一ではない質問を持つ将来の読者にとって、より有用なものにする。説明を追加するためにあなたの答えを編集し、どのような制限と前提が適用されるかを示してください。 – basvk

関連する問題