如何在java中使用objectMapper读取json和处理类似的数据

如何在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);

我从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);
                    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类,在那里我将进行验证。