2016-07-08 3 views
1

現在、私はWSO2 CEPでどのように複雑なデータ入力を処理できるかを把握しようとしています。のは、私は以下の1のように見えるの入力イベントデータ持って想像してみましょう:WSO2 CEP:複雑な入力JSONオブジェクトを扱います

[ 
    { 
     "item_id":456, 
     "user_id":42, 
     "type":"word", 
     "name":"ordre de mission" 
    }, 
    { 
     "item_id":456, 
     "user_id":42, 
     "type":"excel", 
     "name":"horaires" 
    }, 
    { 
     "item_id":456, 
     "user_id":42, 
     "type":"pdf", 
     "name":"facture" 
    } 
] 

{ 
    "item_id":456, 
    "user_id":42, 
    "documents":[ 
      { 
       "type":"word", 
       "name":"ordre de mission" 
      }, 
      { 
       "type":"excel", 
       "name":"horaires" 
      }, 
      { 
       "type":"pdf", 
       "name":"facture" 
      } 
     ] 
} 

理想的な場合には、私は以下の配列のように、これは3つのイベントに爆発見たいのですが私はちょうどそのようなものを取得する方法を見つけることができません...私は"documents"配列を別のイベントと同じように再投入することを考えていたので、CEPは配列を3つのストリーム項目に分割します。しかし、私がそれを行うことができたとしても、item_idとuser_idはプロセス内で失われてしまうでしょう... これまでのところ、ドキュメントのフィールドはストリーム内のシリアル化された文字列になっているので、役に立たないようです...

私がここに示している例は、カプセル化されたオブジェクトと複数のレイヤーを持つ管理しなければならない他のものとはかなり単純です。だから、アレイデータやオブジェクトがイベントデータのルートではない場合や、それらのレイヤーの上にレイヤーがある場合、どのように扱うかについての一般的な方向性を私に指摘できれば、本当に助けになるでしょう!

+0

このリンクをご覧ください:https://docs.wso2.com/display/CEP410/Input+Mapping+Types#InputMappingTypes-JSONinputmappingJSONInputMapping – CapturedTree

答えて

0

これらの子要素[1]を抽出するためにSiddhiマップ拡張を使用できます。実行計画では、地図を作成するためにmap:createFromJSON(ドキュメント)関数(ストリームに対応する属性がドキュメント)を使用してマップ拡張機能を使用することができます。次に、キーから対応する値を抽出します(単語、Excelなど)[1]を参照してください。上のストリームから3つのイベントを出力する場合は、カスタムStreamProcessorを作成する必要があります。 [2]を参照してください。

[1] https://docs.wso2.com/display/CEP410/Siddhi+Extensions#SiddhiExtensions-map

を私たちは、より汎用的な方法で物事を考える場合は、[2] https://docs.wso2.com/display/CEP410/Writing+a+Custom+Stream+Processor+Extension

+0

こんにちはdnWick、ありがとう応答。 Siddhi内の何が私の問題を解決できるかはわかりませんが...レシーバーには、JSONフィールドの "ドキュメント"という配列があります。受信側と実行計画(siddhi)の間で、ストリームを使用する必要があります。私の中心的な問題はまさにそれです。ストリームフィールドが基本型(int 、ブール、文字列など)? – Vinny

+0

ビニー、この問題を解決できますか? –

+0

ビニー、この問題を解決できますか? –

0

を、私は、オブジェクト型が存在しないので、JSONデータを処理する方法を思ったんだけど、ストリームでもない配列属性は...

たぶん、私の問題は、ここでそれは私の質問に表示されているよりも、本当に広いです...

事は、私は彼に適切な方法を、複雑なJSONの入力データを処理する方法を理解していないSIMPL、..です私は缶詰めできません私は間違っているが、私が物事を見る方法は、私は以下のような入力JSONデータを処理する必要があった場合は、私に知らせてください、 "tiers1"、 "emailRecipient":{ "に":[ "[email protected]それは

{ "参照" ..本当に難しいか不可能にさえ深刻なフックと醜い回避策なしだろう「]、 "カーボンコピー":[]、 "blindCarbonCopy":[] }}

で上の例では、どうやって "to"と "carbonCopy"配列の内容をストリームに保存することができますか?文字列属性を使用すると、配列はアトリビュートで直列化されます。これはほとんど使用可能ですが、JSONが指定されている場合、CEPはパブリッシャでこれらの属性を文字列とみなして書くと、その周りにいくつかの引用符を追加します。 それは多くの問題の側面の一つに過ぎません...

私の質問は結局、このような複雑なJSONデータを管理するために設計されたWSO2 CEPですか?私は本当にそうではないと思うので...

関連する問題