kettle的使用和json格式文件的处理

Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。


但是本文重点不是讲Kettle安装和使用。


而是,如何使用Kettle处理Json文件,因为Kettle本身有一点点BUG,JsonInput不能直接处理Utf-8字符的json内容。


所以,要学会变通一下。本例子使用的Kettle版本为7.1,下载网址:https://sourceforge.net/projects/pentaho/files/Data%20Integration/7.1/pdi-ce-7.1.0.0-12.zip/download



首先,打开Kettle的图形编辑界面。

windows版本的命令为Spoon.bat。

kettle的使用和json格式文件的处理_第1张图片



看到这个界面说明你的Kettle环境没有问题。

然后点击菜单 文件->新建->转换

kettle的使用和json格式文件的处理_第2张图片


开始一个json文件的处理流程。


然后,从核心对象里面拖一个json Input对象出来。

kettle的使用和json格式文件的处理_第3张图片


如果json文件不是UTF-8的而是GBK,这样就可以处理了。但是本宝宝不是这样的。

所以,又变通一下,拖了两个组件。

一个是文件内容加载到内存,一个是文本文件输出。

kettle的使用和json格式文件的处理_第4张图片


这两个组件都有编码处理的选择项,这样宝宝就可以处理UTF-8的json文件了。

kettle的使用和json格式文件的处理_第5张图片


然后就是用连接线把三个组件串联起来,非常简单。

kettle的使用和json格式文件的处理_第6张图片

Json Input组件的一些参数是这样配置,当然JsonPath语法不是本文重点。

kettle的使用和json格式文件的处理_第7张图片


kettle的使用和json格式文件的处理_第8张图片


文件内容加载到内存的参数配置:

kettle的使用和json格式文件的处理_第9张图片


文本文件输出的参数配置:

kettle的使用和json格式文件的处理_第10张图片


都配置好了,就可以运行了。

kettle的使用和json格式文件的处理_第11张图片


然后,去看输出的结果文件。本例子输出了一个csv文件file2.csv。

内容如下:

f2,f3,f4
"{""总分"":0,""rcAppId"":""a637725d-aabb-41e3-8128-713dd06f0b76"",""结果"":""拒绝"",""备注"":""征信不良记录"",""费率"":""0.009900""}",a637725d-aabb-41e3-8128-713dd06f0b76,征信不良记录

它是可以直接用Excel打开看的表格。

json源文件也贴上来。内容还是蛮复杂的,而且我还删减了部分内容。

{
    "errorMessage": "",
    "errorCode": "",
    "responseData": {
        "总分": 0,
        "rcAppId": "a637725d-aabb-41e3-8128-713dd06f0b76",
        "结果": "拒绝",
        "备注": "征信不良记录",
        "费率": "0.009900"
    },
    "持久化数据": {
        "lastModifiedTime": "2018-03-30 15:49:06",
        "bizDate": "2018-03-30",
        "errorCode": "",
        "productRcvId": 8,
        "rawData": {
            "request": {
                "app": {
                    "minAmount": "5000.00",
                    "purpose": "经营",
                    "bizDate": "2018-03-30",
                    "accountFourVerification": false,
                    "agreeTime": 1522395949737,
                    "orgId": 3,
                    "isFirst": "false",
                    "appAmount": "5884.00",
                    "creditLine": "5884.00",
                    "rate": "0.009900",
                    "appId": "244d6d3d-2298-46ff-baaa-b252837585d7",
                    "accountNo": "未选择",
                    "isLine": "N",
                    "partyId": "5224f0bc-55cd-4e62-bbec-192990881660",
                    "maxAmount": "150000.00",
                    "loaTime": "20180330154445",
                    "period": 120,
                    "amount": "5884.00",
                    "loanUse": "经营",
                    "productId": "08363214-a832-4f64-bb80-be352d8d0f0f",
                    "externalId": "2",
                    "interestEnumId": 2011001,
                    "thruDate": 1837958400000,
                    "fromDate": 1522339200000,
                    "createBy": "13213571926",
                    "statusId": 200100,
                    "createTime": 1522395838000,
                    "tenantId": "71f28286-f5b3-40e5-ab2f-049b66328b1f"
                },
                "reference": {
                    "enterprise": {
                        "warmPromptMessage": "",
                        "businessLicenseCode": "123456789123456789",
                        "semiannualRevenue": "5282828",
                        "industryInvolved": "",
                        "isShow": true,
                        "creditCode": "",
                        "organizationCode": "",
                        "accountNo": false,
                        "name": "永嘉路",
                        "revenueDocumentId": ["b25ef019-29ed-4e6b-abb1-69667d3793e0"],
                        "businessPlaceType": "自有",
                        "annualRevenue": "",
                        "seq": 4
                    },
                    "frequentlyUsedAccount": {
                        "mobilePhone": "13213571926",
                        "accountNo": "6217370090101267356",
                        "fourVerification": false
                    },
                    "estate": {
                        "area": "36",
                        "isMortgage": false,
                        "purchaseDate": "",
                        "documentExplain": "",
                        "court": "盛世豪城小区",
                        "type": "住宅",
                        "structure": "",
                        "isLift": "电梯",
                        "toward": "",
                        "valuation": "108000",
                        "estateAddress": {
                            "address": "",
                            "province": "内蒙古",
                            "city": "巴彦淖尔",
                            "district": "临河区"
                        },
                        "isOwner": false,
                        "documentId": ["0ae9d39e-f7ee-44b8-a92e-cdff108401a9"],
                        "floor": ""
                    },
                    "asset": [],
                    "vehicle": {
                        "isMortgage": false,
                        "purchaseDate": "",
                        "engineNumber": "",
                        "documentExplain": "",
                        "type": "",
                        "plateNumber": "",
                        "isOwner": false,
                        "price": "",
                        "driverLicense": "",
                        "vin": "",
                        "documentId": [],
                        "brand": "",
                        "vehicleLicense": ""
                    }
                },
                "rcAppTypeCode": "2",
                "tenantId": "71f28286-f5b3-40e5-ab2f-049b66328b1f",
                "custPerson": {
                    "reservedCity": "巴彦淖尔",
                    "graduateSchool": "",
                    "weechatNo": "",
                    "education": "",
                    "contactInfo": [{
                        "workingUnit": "",
                        "twoVerification": false,
                        "weechatNo": "",
                        "mobilePhone": "13623895652",
                        "qqNo": "",
                        "name": "江大头",
                        "threeVerification": false,
                        "idNo": "410825198702245568",
                        "email": "",
                        "seq": 1,
                        "relation": "家人",
                        "isFrist": true
                    }, {
                        "workingUnit": "",
                        "twoVerification": false,
                        "weechatNo": "",
                        "mobilePhone": "13623895645",
                        "qqNo": "",
                        "name": "金城武张根硕",
                        "threeVerification": true,
                        "idNo": "15282319821014001X",
                        "email": "",
                        "seq": 2,
                        "relation": "配偶",
                        "isFrist": false
                    }, {
                        "workingUnit": "",
                        "twoVerification": false,
                        "weechatNo": "",
                        "mobilePhone": "13623895654",
                        "qqNo": "",
                        "name": "刘浩",
                        "threeVerification": false,
                        "idNo": "",
                        "email": "",
                        "seq": 3,
                        "relation": "同事",
                        "isFrist": false
                    }, {
                        "workingUnit": "",
                        "twoVerification": false,
                        "weechatNo": "",
                        "mobilePhone": "13623895651",
                        "qqNo": "",
                        "name": "江北",
                        "threeVerification": false,
                        "idNo": "",
                        "email": "",
                        "seq": 4,
                        "relation": "朋友",
                        "isFrist": false
                    }],
                    "gender": "",
                    "ethnicity": "",
                    "warmPromptMessage": "\n\t\t\t\t\t\t\n\t\t\t\t\t

温馨提示:

1.提供公户和密码。

2.社保局

3.社保局423

",
                    "idNo": "410326199804017527",
                    "permanentAddress": {
                        "address": "永嘉路",
                        "province": "内蒙古",
                        "city": "巴彦淖尔",
                        "district": "临河区"
                    },
                    "partyId": "5224f0bc-55cd-4e62-bbec-192990881660",
                    "formerName": "",
                    "email": "",
                    "seq": 1,
                    "identificationId": 1001,
                    "workingUnit": {
                        "occupation": "农、林、牧、渔、水利业生产人员",
                        "incomeProofDocumentId": ["9c4c086b-1bcd-483a-b8a3-fd34e178a48e"],
                        "unitNature": "国有企业",
                        "employmentDate": "",
                        "warmPromptMessage": "",
                        "companyName": "",
                        "averageIncome": "83839",
                        "unitSize": "",
                        "unitPhone": "",
                        "title": "中级领导",
                        "isShow": true,
                        "workingDate": "2018-03-19",
                        "afterTaxIncome": "939396",
                        "companyAddress": {
                            "address": "永嘉路",
                            "province": "内蒙古",
                            "city": "巴彦淖尔",
                            "district": "临河区"
                        },
                        "ptitle": "中级",
                        "workingEmail": "",
                        "companyIndustry": ""
                    },
                    "reservedFundsId": "134455",
                    "photoDocumentId": [],
                    "degree": "",
                    "health": "",
                    "isShow": true,
                    "creditBalance": "63044.00",
                    "graduateDate": "",
                    "reservedFunds": {
                        "password": "34566",
                        "city": "巴彦淖尔",
                        "username": "134455"
                    },
                    "qqNo": "",
                    "mobilePhone": "13213571926",
                    "mateThreeVerification": false,
                    "name": "常雨霖",
                    "firstThreeVerification": false,
                    "householdType": "",
                    "maritalStatus": "已婚",
                    "residenceAddress": {
                        "residenceType": "",
                        "address": "永嘉路",
                        "province": "内蒙古",
                        "telephoneNo": "",
                        "city": "巴彦淖尔",
                        "district": "临河"
                    },
                    "reservedFundsPassword": "34566",
                    "riskPreference": "1.00"
                }
            }
        },
        "tid": "71f28286-f5b3-40e5-ab2f-049b66328b1f",
        "createBy": "net.transino.rce.app.biz.impl.DecisionEngineBizImpl",
        "mobilePhone": "13213571926",
        "createTime": "2018-03-30 15:49:01",
        "durationSecond": 4.310,
        "name": "常乐鑫",
        "errorStack": ""
    },
    "isSuccess": true

}


最后是贴一下kettle转化配置文件k3.ktr内容:



 
    k3
   
   
   
    Normal
    /
   
   

   
     
       
       
       


       
       
       
       
          ID_BATCH
          Y
          ID_BATCH
       

       
          CHANNEL_ID
          Y
          CHANNEL_ID
       

       
          TRANSNAME
          Y
          TRANSNAME
       

       
          STATUS
          Y
          STATUS
       

       
          LINES_READ
          Y
          LINES_READ
         
       

       
          LINES_WRITTEN
          Y
          LINES_WRITTEN
         
       

       
          LINES_UPDATED
          Y
          LINES_UPDATED
         
       

       
          LINES_INPUT
          Y
          LINES_INPUT
         
       

       
          LINES_OUTPUT
          Y
          LINES_OUTPUT
         
       

       
          LINES_REJECTED
          Y
          LINES_REJECTED
         
       

       
          ERRORS
          Y
          ERRORS
       

       
          STARTDATE
          Y
          STARTDATE
       

       
          ENDDATE
          Y
          ENDDATE
       

       
          LOGDATE
          Y
          LOGDATE
       

       
          DEPDATE
          Y
          DEPDATE
       

       
          REPLAYDATE
          Y
          REPLAYDATE
       

       
          LOG_FIELD
          Y
          LOG_FIELD
       

       
          EXECUTING_SERVER
          N
          EXECUTING_SERVER
       

       
          EXECUTING_USER
          N
          EXECUTING_USER
       

       
          CLIENT
          N
          CLIENT
       

     
     
       
       
       

       
       
       
          ID_BATCH
          Y
          ID_BATCH
       

       
          SEQ_NR
          Y
          SEQ_NR
       

       
          LOGDATE
          Y
          LOGDATE
       

       
          TRANSNAME
          Y
          TRANSNAME
       

       
          STEPNAME
          Y
          STEPNAME
       

       
          STEP_COPY
          Y
          STEP_COPY
       

       
          LINES_READ
          Y
          LINES_READ
       

       
          LINES_WRITTEN
          Y
          LINES_WRITTEN
       

       
          LINES_UPDATED
          Y
          LINES_UPDATED
       

       
          LINES_INPUT
          Y
          LINES_INPUT
       

       
          LINES_OUTPUT
          Y
          LINES_OUTPUT
       

       
          LINES_REJECTED
          Y
          LINES_REJECTED
       

       
          ERRORS
          Y
          ERRORS
       

       
          INPUT_BUFFER_ROWS
          Y
          INPUT_BUFFER_ROWS
       

       
          OUTPUT_BUFFER_ROWS
          Y
          OUTPUT_BUFFER_ROWS
       

     
     
       
       
       

       
       
          ID_BATCH
          Y
          ID_BATCH
       

       
          CHANNEL_ID
          Y
          CHANNEL_ID
       

       
          LOG_DATE
          Y
          LOG_DATE
       

       
          LOGGING_OBJECT_TYPE
          Y
          LOGGING_OBJECT_TYPE
       

       
          OBJECT_NAME
          Y
          OBJECT_NAME
       

       
          OBJECT_COPY
          Y
          OBJECT_COPY
       

       
          REPOSITORY_DIRECTORY
          Y
          REPOSITORY_DIRECTORY
       

       
          FILENAME
          Y
          FILENAME
       

       
          OBJECT_ID
          Y
          OBJECT_ID
       

       
          OBJECT_REVISION
          Y
          OBJECT_REVISION
       

       
          PARENT_CHANNEL_ID
          Y
          PARENT_CHANNEL_ID
       

       
          ROOT_CHANNEL_ID
          Y
          ROOT_CHANNEL_ID
       

     
     
       
       
       

       
       
          ID_BATCH
          Y
          ID_BATCH
       

       
          CHANNEL_ID
          Y
          CHANNEL_ID
       

       
          LOG_DATE
          Y
          LOG_DATE
       

       
          TRANSNAME
          Y
          TRANSNAME
       

       
          STEPNAME
          Y
          STEPNAME
       

       
          STEP_COPY
          Y
          STEP_COPY
       

       
          LINES_READ
          Y
          LINES_READ
       

       
          LINES_WRITTEN
          Y
          LINES_WRITTEN
       

       
          LINES_UPDATED
          Y
          LINES_UPDATED
       

       
          LINES_INPUT
          Y
          LINES_INPUT
       

       
          LINES_OUTPUT
          Y
          LINES_OUTPUT
       

       
          LINES_REJECTED
          Y
          LINES_REJECTED
       

       
          ERRORS
          Y
          ERRORS
       

       
          LOG_FIELD
          N
          LOG_FIELD
       

     
     
       
       
       

       
       
          ID_BATCH
          Y
          ID_BATCH
       

       
          CHANNEL_ID
          Y
          CHANNEL_ID
       

       
          LOG_DATE
          Y
          LOG_DATE
       

       
          METRICS_DATE
          Y
          METRICS_DATE
       

       
          METRICS_CODE
          Y
          METRICS_CODE
       

       
          METRICS_DESCRIPTION
          Y
          METRICS_DESCRIPTION
       

       
          METRICS_SUBJECT
          Y
          METRICS_SUBJECT
       

       
          METRICS_TYPE
          Y
          METRICS_TYPE
       

       
          METRICS_VALUE
          Y
          METRICS_VALUE
       

     
   
   
     
     

     
      0.0
      0.0
   
    10000
    50
    50
    N
    Y
    50000
    Y
   
    N
    1000
    100
   
   

   
   

   
   

   
   

    -
    2018/03/30 20:06:19.433
    -
    2018/03/30 20:06:19.433
   
    N
 
 
 

 
   
      文件内容加载至内存
      JSON Input
      Y
   

   
      JSON Input
      文本文件输出
      Y
   

 

 
    JSON Input
    JsonInput
   
    Y
   
    1
   
      none
     
   

    N
   
    N
    N
    N
    N
    N
    Y
    Y
   
   
     
     
     
      N
      N
   

   
     
        f2
        $.responseData
        String
       
       
       
       
        -1
        -1
        none
        N
     

     
        f3
        $.responseData.rcAppId
        String
       
       
       
       
        -1
        -1
        none
        N
     

     
        f4
        $.responseData.备注
        String
       
       
       
       
        -1
        -1
        none
        N
     

   

    0
    Y
    N
    f1
   
   
   
   
   
   
   
   
   
   
     
     
     
     

   

   
      480
      400
      Y
   

 

 
    文件内容加载至内存
    LoadFileInput
   
    Y
   
    1
   
      none
     
   

    N
   
    N
    Y
    N
    N
   
    UTF-8
   
      D:\223.json
     
     
     
      N
   

   
     
        f1
        content
        None
       
       
       
       
        -1
        -1
        none
        N
     

   

    0
    N
   
   
   
   
   
   
   
   
   
   
     
     
     
     

   

   
      192
      432
      Y
   

 

 
    文本文件输出
    TextFileOutput
   
    Y
   
    1
   
      none
     
   

    ,
    "
    N
    N
   
Y

   
N

    DOS
    None
   
   
    N
   
    Y
   
      D:\file2
      N
      N
      N
      csv
      N
      N
      N
      N
      N
      N
     
      Y
      N
      N
      0
   

   
     
        f2
        String
       
       
       
       
       
        none
        -1
        -1
     

     
        f3
        String
       
       
       
       
       
        none
        -1
        -1
     

     
        f4
        String
       
       
       
       
       
        none
        -1
        -1
     

   

   
   
     
     
     
     

   

   
      704
      432
      Y
   

 

 
 

 
 

  N


===================================

JSONPath语法

返回数组的最后两个值
List lastTwoName = context.read("$.result.records[-2:].name");

你可能感兴趣的:(java)