Я получаю данные json из темы кафки. Как я могу применить синтаксический анализ json, чтобы получить все поля для всех объектов в классе схемы шторма, который использует метод десериализации, после чего я возвращаю значения в новые возвращаемые значения(). (Метод класса backtype.storm.tuple.Values ) ? То есть, если у меня есть 2 объекта json в моей теме, я зацикливаю их, чтобы получить все поля, наконец, я должен вернуть все значения методу возврата. мой возврат должен содержать все поля двух объектов json.
Моя проблема: в методе возврата возвращаются только 2 данных obj json. я думаю, что все поля 2-го объекта переопределяют поля 1-го объекта. Наконец, поля второго объекта возвращаются в конце.
может ли кто-нибудь из вас дать мне идею вернуть все поля объектов (1,2 поля объектов)....
Заранее спасибо
public class MainParserSpout implements Scheme{
String tweet_created_at;
String tweet_id;
String tweet_id_str;
String tweet_text;
String tweet_source;`
@Override
try{
public List<Object> deserialize(byte[] bytes){
String twitterEvent = new String(bytes, "UTF-8");
JSONArray JSON = new JSONArray(twitterEvent);
for(int i=0;i<JSON.length();i++) {
JSONObject object_tweet=JSON.getJSONObject(i);
//Tweet status
try{
this.tweet_created_at=object_tweet.getString("created_at");
this.tweet_id=object_tweet.getString("id");
this.tweet_id_str=object_tweet.getString("id_str");
this.tweet_text=object_tweet.getString("text");
this.tweet_source=object_tweet.getString("source");
}catch(Exception e){}
} //array for close
}catch(Exception e){}
} //JSON array close
return new Values(tweet_created_at,tweet_id,tweet_id_str,tweet_text,tweet_source);
} //deserialize method close
public Fields getOutputFields() {
return newFields("tweet_created_at","tweet_id","tweet_id_str","tweet_text","tweet_source");
} //getOutputFields method close
} //class close
deserialize
должен возвращать один кортеж. Таким образом, все данные из вашего JSON должны быть собраны в одно возвращаемое значение. Вы не можете вернуть несколько кортежей из одного твита. - person Matthias J. Sax   schedule 04.01.2016deserialize
- правильный путь; однако вы не можете получить несколько кортежей за один вызов. Однако вы можете отправить два твита, удвоив свой кортеж, т. е. дважды указав каждое значение/поле/атрибут. После этого вы можете использовать болт, который принимает двойные твиты, разделяет этот кортеж и выдает два одиночных твита-кортежа. - person Matthias J. Sax   schedule 05.01.2016