json 文件转字典形式

  • 背景:
    之前在苏州银行做发票 OCR 的时候,遇到过一个第三方的 OCR 产商,它是将发票识别的结果以 json 文件呈现。而我们需要的数据就存在在 json 文件中了。

  • 文件:
    由于时间太久,当时的 json 文件已经找不到了。现在论坛任意找一份 json 文件。部分字段如下图:
    json 文件转字典形式

由于涉及到二进制,中间的中文部分,在上图中是看不到的。

  • 解决方案:
    将 json 文件中字段转化为字典形式,这样我们直接用对应的键就能拿到对应的值了。

代码如下:

import json

  
str_file = 'C:/file/test/test1/1.json'
with open(str_file, 'rb',) as f:
# print("Load str file from {}".format(str_file))
    r = json.load(f)
print(type(r))
print(r)
print(r['children'][0]['出货单号'])

这样读出来的结果如下图, r 的形式为:
json 文件转字典形式

{'children': [{'出货单号': 'V20190700389', '出货日期': '20190726', '单位': 'PCS', '品名': '护角', 
'客户名称': '名硕五厂', '客户料号': '1534-03KY000', '客户编号': 170.0, '序号': 1.0, '整数包装量': '1', 
'规格': '50*50*3*1000', '订单编号': 'M20180100200'}, {'出货单号': 'V20190700390', '出货日期': '20190726', 
'单位': 'PCS', '品名': '护角', '客户名称': '名硕五厂', '客户料号': '1534-03L1000', '客户编号': 170.0, 
'序号': 2.0, '整数包装量': '1', '规格': '50*50*3*850', '订单编号': 'M20180100200'}, 
{'出货单号': 'V20190700391', '出货日期': '20190726', '单位': 'PCS', '品名': '护角', '客户名称': '名硕五厂', 
'客户料号': '1534-03ET000', '客户编号': 170.0, '序号': 3.0, '整数包装量': '1', '规格': '50*50*5*590',
'订单编号': 'M20171100204'}, {'出货单号': 'V20190700392', '出货日期': '20190726', '单位': 'PCS', 
'品名': '护角', '客户名称': '名硕北四厂', '客户料号': '1534-030E000', '客户编号': '040', '序号': 4.0,
'整数包装量': '1', '规格': '50*50*3*800', '订单编号': 'M20171100207'}, {'出货单号': 'V20190700393',
'出货日期': '20190726', '单位': 'PCS', '品名': '护角', '客户名称': '名硕北四厂', '客户料号': '1534-02TJ000',
'客户编号': '040', '序号': 5.0, '整数包装量': '1', '规格': '50*50*3*850', '订单编号': 'M20171100207'},
{'出货单号': 'V20190700394', '出货日期': '20190726', '单位': 'PCS', '品名': '护角', '客户名称': '名硕北四厂',
'客户料号': '1534-030S000', '客户编号': '040', '序号': 6.0, '整数包装量': '1', '规格': '50*50*3*900',
'订单编号': 'M20171100207'}], 'rows': 7, 'title': 'C:\\Users\\lwj\\Desktop\\磐石订单模板.XLS'}

对应,如果我们想拿到出货订单,只需要用 r[‘children’][0]['出货单号'] 便可拿到。这样是不是很方便呢。