如何在java中使用objectMapper读取json和处理类似的数据
我从kakfa主题{“卡片id”:348702330256514,“会员id”:37495066290,“金额”:4380912,“邮政编码”:96774,“pos_id”:248063406800722,“交易日期”:“01-03-2018 08:24:29”} 如何使用ObjectMapper和TransactionData.class解析此数据,并使用getter和setter读取值如何在java中使用objectMapper读取json和处理类似的数据,java,json,apache-spark,parsing,Java,Json,Apache Spark,Parsing,我从kakfa主题{“卡片id”:348702330256514,“会员id”:37495066290,“金额”:4380912,“邮政编码”:96774,“pos_id”:248063406800722,“交易日期”:“01-03-2018 08:24:29”} 如何使用ObjectMapper和TransactionData.class解析此数据,并使用getter和setter读取值 rdd.foreach(a -> { System.out.println(a);
rdd.foreach(a -> { System.out.println(a);
ObjectMapper mapper = new ObjectMapper();
TransactionData cardTransactions =
mapper.readValue(a,TransactionData.class);
System.out.println(cardTransactions);
TransactionData transData = new TransactionData();
JSONObject obj = new
JSONObject(cardTransactions.toString());
String cardId = obj.get(“card_id”).toString();
System.out.println(“Printing json cardId: “+ cardId);
transData.setCard_id(cardId);
String memberId = obj.get(“member_id”).toString();
System.out.println(“Printing json memberId: “+ memberId);
transData.setMember_id(memberId);
int amount = obj.getInt(“amount”);
System.out.println(“Printing json Amount: “+ amount);
transData.setAmount(amount);
int postcode = obj.getInt(“postcode”);
System.out.println(“Printing json Postcode: “+ postcode);
transData.setPostcode(postcode);
String pos_id = obj.get(“pos_id”).toString();
System.out.println(“Printing json pos_id: “+ pos_id);
transData.setPos_id(pos_id);
String transaction_dt = obj.getString(“transaction_dt”);
System.out.println(“Printing json transaction_dt: “+ transaction_dt);
transData.setTransaction_dt(transaction_dt);
transData.setUid(cardId + “#” + amount);
System.out.println(“Printing json transaction_dt: “+ transData.getTransaction_dt());
});
将以下代码用于以下导入:
//import com.fasterxml.jackson.core.JsonGenerator;
//import com.fasterxml.jackson.core.JsonParseException;
//import com.fasterxml.jackson.core.JsonProcessingException;
//import com.fasterxml.jackson.core.type.TypeReference;
//import com.fasterxml.jackson.databind.JsonMappingException;
//import com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper mapper = new ObjectMapper();
List<TransactionData> dataList = new ArrayList<TransactionData>();
rdd.foreach(a -> {
try
{
// Use this line if the incoming data is an exact match
// Map<TransactionData> transData = mapper.readValue(a, new TypeReference<TransactionData>(){});
// Else the following code
Map<String, Object> mapList = mapper.readValue(a, new TypeReference<Map<String, Object>>(){});
TransactionData transData = new TransactionData();
for(Map<String,Object> map : mapList)
{
transData.setCard_id(map.get("card_id").toString());
// add others..........
}
dataList.add(transData);
}
}
catch (JsonParseException e)
{
e.printStackTrace();
}
catch (JsonMappingException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
} });
//导入com.fasterxml.jackson.core.JsonGenerator;
//导入com.fasterxml.jackson.core.JsonParseException;
//导入com.fasterxml.jackson.core.JsonProcessingException;
//导入com.fasterxml.jackson.core.type.TypeReference;
//导入com.fasterxml.jackson.databind.JsonMappingException;
//导入com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper mapper=新的ObjectMapper();
List dataList=new ArrayList();
rdd.foreach(a->{
尝试
{
//如果传入数据完全匹配,则使用此行
//Map transData=mapper.readValue(一个新的TypeReference(){});
//否则,请输入以下代码
Map mapList=mapper.readValue(a,新的TypeReference(){});
TransactionData transData=新建TransactionData();
用于(地图:地图列表)
{
transData.setCard_id(map.get(“card_id”).toString();
//添加其他。。。。。。。。。。
}
dataList.add(transData);
}
}
捕获(JSONParsee异常)
{
e、 printStackTrace();
}
捕获(JsonMappingException e)
{
e、 printStackTrace();
}
捕获(IOE异常)
{
e、 printStackTrace();
} });
如果需要创建数据帧:
Dataset<Row> dff = spark.createDataFrame(dataList, TransactionData.class);
Dataset dff=spark.createDataFrame(dataList,TransactionData.class);
您能否添加更多详细信息,您希望实现什么目标?在Spark中读取来自Kafka的消息,并将其解析为某个类的实例(例如TransactionData)?获取这些值后,我在hbase中有一个查找表,其中我将检查卡的详细信息是否已经存在,以确定传入的交易是否真实/欺诈,然后根据状态,我再次更新hbase中的相应表。因此,我有一个单独的代码名为hbaseado.getTxnDetails(),在其中我管理我的hbase函数,我想知道如何使用对象映射器并实现这一点。如果不让我知道的话,希望我能按要求提供详细信息。另外,我有一个类TransactionData,其中所有列都是用getter和setter声明的。一旦我解析,我应该能够将该数据传递给HBASeado类,在那里我将进行验证。