第一步需要安装jq
按照命令顺序执行即可,安装Jq
wget https://github.com/stedolan/jq/releases/download/jq-1.5/jq-1.5.tar.gz
tar zxvf jq-1.5.tar.gz
cd jq-1.5
./configure && make && make install
判断是否安装完成
echo '{"name":"bob","age":"20"}' | jq '.name'
第二步查看JSON格式
去获取json格式中的 COLUMNINFO 对象里面的值。
{
"OWNER": "AHWNCC",
"objnNo": "77201",
"OP": "I",
"TABLE": "AC_CONTRACTADD_INFO",
"OP_SCN": "53157161",
"OP_TIME": "2023-06-21 11:35:59",
"LOADERTIME": "2023-06-21 11:36:00",
"TRANS_ID": "0",
"ORA_ROWID": "AAAS2RAA2AAH5R+AAg",
"SEQ_ID": "0",
"COLUMNINFO": {
"BUSI_TYPE": "null",
"CONTRACT_NO": "10000030299086",
"FIELD_CODE": "11000090",
"FIELD_ORDER": "0",
"FIELD_VALUE": "2",
"FINISH_FLAG": "N",
"LOGIN_ACCEPT": "64431319552",
"LOGIN_NO": "USypWZSBm",
"OP_CODE": "3901",
"OP_TIME": "1985-06-19 20:26:01",
"OTHER_VALUE": "帐户属性类型附加"
},
"PK": {
"CONTRACT_NO": "10000030299086",
"FIELD_CODE": "11000090"
}
}
{
"OWNER": "AHWNCC",
"objnNo": "77201",
"OP": "I",
"TABLE": "AC_CONTRACTADD_INFO",
"OP_SCN": "53157161",
"OP_TIME": "2023-06-21 11:35:59",
"LOADERTIME": "2023-06-21 11:36:00",
"TRANS_ID": "0",
"ORA_ROWID": "AAAS2RAA2AAH5R0AAP",
"SEQ_ID": "0",
"COLUMNINFO": {
"BUSI_TYPE": "null",
"CONTRACT_NO": "10000030299122",
"FIELD_CODE": "11000090",
"FIELD_ORDER": "1",
"FIELD_VALUE": "1",
"FINISH_FLAG": "Y",
"LOGIN_ACCEPT": "164644456",
"LOGIN_NO": "Zgof",
"OP_CODE": "0000",
"OP_TIME": "1998-08-15 18:02:12",
"OTHER_VALUE": "系统刷新"
},
"PK": {
"CONTRACT_NO": "10000030299122",
"FIELD_CODE": "11000090"
}
}
注意,我这边文件,一个json串是只有一行,因为一行所以可以直接用读取文件的每一行来进行shell脚本的编写。
第三步输出shell脚本
#!/bin/bash
# 将json 数据 解析成 csv文件
while read -r line; do
# jq -r 是英文字符串输出出来会有双引号,-r 可以消除
# 用jq 插件的对象的方式去获取
BUSI_TYPE=$(echo $line | jq -r '.COLUMNINFO.BUSI_TYPE')
CONTRACT_NO=$(echo $line | jq -r '.COLUMNINFO.CONTRACT_NO')
FIELD_CODE=$(echo $line | jq -r '.COLUMNINFO.FIELD_CODE')
FIELD_ORDER=$(echo $line | jq -r '.COLUMNINFO.FIELD_ORDER')
FIELD_VALUE=$(echo $line | jq -r '.COLUMNINFO.FIELD_VALUE')
FINISH_FLAG=$(echo $line | jq -r '.COLUMNINFO.FINISH_FLAG')
LOGIN_ACCEPT=$(echo $line | jq -r '.COLUMNINFO.LOGIN_ACCEPT')
LOGIN_NO=$(echo $line | jq -r '.COLUMNINFO.LOGIN_NO')
OP_CODE=$(echo $line | jq -r '.COLUMNINFO.OP_CODE')
OP_TIME=$(echo $line | jq -r '.COLUMNINFO.OP_TIME')
OTHER_VALUE=$(echo $line | jq -r '.COLUMNINFO.OTHER_VALUE')
# 输出文件的拼接
data_txt=${BUSI_TYPE},${CONTRACT_NO},${FIELD_CODE},${FIELD_ORDER},${FIELD_VALUE},${FINISH_FLAG},${LOGIN_ACCEPT},${LOGIN_NO},${OP_CODE},${OP_TIME},${OTHER_VALUE}
# 注意要用>> 这个是追加。 不要用 > 这个是覆盖,会导致每一行都会被覆盖只剩最后一行输出
echo $data_txt >> 'AC_CONTRACTADD_INFO_JSON.csv'
done <AC_CONTRACTADD_INFO.csv
结果展示: