【问题标题】:how to read the json with data like and process using objectMapper in java如何在java中使用objectMapper读取数据和处理json
【发布时间】:2019-05-27 01:36:36
【问题描述】:

我有如下 json 字符串从 kakfa 主题 {“card_id”:348702330256514,“member_id”:37495066290,“amount”:4380912,“postcode”:96774,“pos_id”:248063406800722,“transaction_dt”:“ 01-03-2018 08:24:29”}

如何使用带有 TransactionData.class 的 ObjectMapper 解析这些数据,并使用 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());

                }); 

【问题讨论】:

  • 您能否添加更多详细信息,您想实现什么?在 Spark 中从 Kafka 读取消息并将它们解析为某个类的实例(例如 TransactionData)?
  • 在获取这些值后,我在 hbase 中有一个查找表,我将在其中检查卡详细信息是否已经存在,以确定传入的交易是否是真实/欺诈然后根据状态我更新了 hbase 中的相应表再次。所以为此我有一个名为 HbaseDAO.getTxnDetails() 的单独代码,我在其中管理我的 hbase 功能,我想知道使用对象映射器并实现这一点。如果不让我知道,希望我按要求提供详细信息。
  • 我也有一个 TransactionData 类,所有列都声明了 getter 和 setter,一旦我解析,我应该能够将此数据传递给 HbaseDAO 类,我将在其中进行验证。

标签: java json apache-spark parsing


【解决方案1】:

将以下代码用于以下导入:

//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();
    } }); 

如果需要创建数据框:

Dataset<Row> dff = spark.createDataFrame(dataList, TransactionData.class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多