2017-10-25 9 views
0

私はkafkaからjsonイベントをストリーミングしようとしていましたが、それを平坦化してから、Spring Cloud Streamを使用して別のトピックに戻しました。Spring Cloud Stream Processor単一入力、複数行出力

入力:

{ 
    "major": "Computer Science", 
    "books": [{ 
     "title": "Learn C", 
     "author": "Prof C" 
    }, 
    { 
     "title": "Learn Java", 
     "author": "Java Expert" 
    },{ 
     "title": "Learn Python", 
     "author": "Python Master" 
    },] 
} 

平坦化プロセス:

@ServiceActivator(inputChannel = Sink.INPUT, outputChannel = Source.OUTPUT) 
public String(String event){ 
    JSONArray result = new JSONArray(); 

    JSONObject rawEvent = new JSONObject(event); 

    String major = rawEvent.get("major"); 
    JSONArray books = rawEvent.get("books"); 

    for (int i = 0; i < books.length; i++){ 
     JSONObject book = books.get(i); 
     book.put("major", major); 
     result.put(book) 
    } 

    return result.toString(); 
} 

のみ生産:

[{"major":"Computer Science", "books.title":"Learn C", "books.author":"Prof C"}, 
{"major":"Computer Science", "books.title":"Learn Java", "books.author":"Java Expert"}, 
{"major":"Computer Science", "books.title":"Learn Python", "books.author":"Python Master"}] 

私の質問は、それがこの

{"major":"Computer Science", "books.title":"Learn C", "books.author":"Prof C"} 
{"major":"Computer Science", "books.title":"Learn Java", "books.author":"Java Expert"} 
{"major":"Computer Science", "books.title":"Learn Python", "books.author":"Python Master"} 
のようになるようにする方法であります

私は戻って押し込むことができますmutilple JSONObjectは私がやったもののように単一のJSONArrayではありませんか?

Afaik、Spring Cloud Streamの出力は、上記の私のケースに適合しない1つのイベントで、カフカに3つのイベントを生成します。

ありがとうございます。

+0

ようこそStackOverflowへようこそ。 [ツアー](http://stackoverflow.com/tour)を見て、[ヘルプセンター](http://stackoverflow.com/help)を読んで[質問する方法]を読んでください。 (http://stackoverflow.com/help/how-to-ask)、[どのような質問を避けるべきですか?](http://stackoverflow.com/help/dont-ask)、[MCVE:最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)周囲の人があなたが何を意味するのか、問題が何であるかを簡単に読んで理解することができれば、彼らはもっと助けてくれるでしょう:) – Dwhitz

+1

@Dwhitzあなたのご意見ありがとうございます。私の質問が更新されます。 :) – van

答えて

1

確かに私は誤解しました。 この場合、私はSpring IntegrationEnterprise Integration Patternsを持ち込むことを提案します。基本的にスプリッタの明確なケースがあります。そこには多くの例がありますが、ここに素早いスニペットがあります: 希望があれば

+0

これは私が探していた答えです。それを試して動作します!ありがとうございました。 – van

0

あなたが作り出したのは、有効なJSON配列です。あなたが作成しようとしているものは、有効なJSONではありません。しかし、あなたが大丈夫であれば、単にStringBuilderを使用して、 book.toString()を(JSONArrayの代わりに)追加することができます。それは少なくともあなたが探しているものを生み出します。

また、これは実際にはJava/JSONの一般的な質問ではなく、Spring Cloud Streamに関連する質問ではないので、より良い回答を得るための具体的なフォーラムがStackOverflowにあると思います。

+0

申し訳ありませんが、あなたは私の質問を誤解しているようです。私が欲しいのは、1イベントの代わりに3イベントをカフカにプッシュすることです。アフリカ、Spring Cloud Streamは1つの出力しか生成しません。 入力ありがとうございます – van

+0

確かに私は誤解しました。 –

関連する問題