最近因为工作太忙了,没有来得及及时更新自己的博客,自己这段时间也没有搞新技术,一直在修改公司的代码错误,真是苦逼呀,修改过程中也有点收获。分享这篇文章是自己工作中总结的怎样可以从大的json格式的文章中选取自己想要的字段。因为贷后所需要的发沉托运的字段太多了,如果一个个的查找浪费时间和浪费精力。
目标字段,这里首先分享一下json格式的字段如下:

json_dict =
 {
            "test1": "wx9fdb8ble7ce3c68f",
            "test2": "123456789",
            "testData1": {   
                "testdatason1": "97895455"
                "testdatason2":3,
                "testData2": [
                    {
                        "testshuzu1":"12"
                        "testshuzu1":"11"
                    },
                     {
                        "testshuzu2":"13"
                        "testshuzu2":"14"
                    },
                    ,
                    {
                         "testshuzu3":"15"
                        "testshuzu3":"16"
                    }
                ]
          }
}

这是从网上随便找的一篇,当然当我们爬取的类似json格式的文章的时候,这里就不分享其中类似的形式,解决办法是转化为json格式的文章,可从一下的技巧入手:json_data = '{"a":1,"b":2,"c":3,"d":4}' //类似这类的转化这里针对这个字符串作者分享三种解析方法:

import demjson
import json
json_data = '{"a":1,"b":2,"c":3,"d":4}'

print eval(json_data)
print json.loads(json_data)
print demjson.decode(json_data)

以上的三种方法仅仅是针对上述,当然你会发现大多数的不规则的用这几个解决时都可以的,如果是无法解决恭喜你喜提正则表达式来解析。
好了进入正题,这里因为工作的代码,所以不便展示源码和json字段,这里只能告诉你方法。
我们知道上述的json_dict 经过转换我们可以通过字典的方式来,因为解析json作者这里还是终极目标转化为字典。

json_dict =
 {
            "test1": "wx9fdb8ble7ce3c68f",
            "test2": "123456789",
            "testData1": {   
                "testdatason1": "97895455"
                "testdatason2":3,
                "testData2": [
                    {
                        "testshuzu1":"12"
                        "testshuzu1":"11"
                    },
                     {
                        "testshuzu2":"13"
                        "testshuzu2":"14"
                    },
                    ,
                    {
                         "testshuzu3":"15"
                        "testshuzu3":"16"
                    }
                ]
          }
}

想要的字段:
 "testshuzu3":"15"
 "testshuzu3":"16"
大体上我们都是这样做的:

json_infos = json_dict['testData1']['testData2']
然后通过循环一个个的拿取值。

当然可以,不过这里作者想要强调的是,如果字段比较多,而写入CSV文件需要表头难道去一个个的添加查找,那是最笨的方法,这里直接上方法代码:

import sys
import demjson
import csv
import time

def fache():
    fache_res= requests.post(url=url, headers=headers, data=data)
    res_infos = demjson.decode(fache_res.text)
    all_infos = res_infos['data']['table']['list']
    for each_infos in all_infos:
        item = {k: v for k, v in each_infos.items() if k in headers_key}
        writer.writerow(item)
    print 'this is %s page' % i


if __name__ == '__main__':
    headers_key = {
        "rowno": u"序号",
        "OrderNum": u"运单号",
        "billingDate": u"开单日期",      //自己在大的json文件中想要的字段
        "startCity": u"发站",
        "toCity": u"到站",
        "ConsignorName": u"托运人",
        "ConsigneeName": u"收货人",
        "GoodsName": u"货物名称",
        "Numbers": u"件数",
        "Weight": u"重量",
        "totalPrice": u"合计运费",
        "actual_price": u"实际运费",
        "freight_price": u"运费",
        "profit": u"单票毛利",
        "ConsignorPhone": u"托运人电话",
        "ConsigneePhone": u"收货人电话",
        "Volume": u"体积"
    }
    header_k = headers_key.keys()
    csv_file = open('cx-%d.csv' % (int(time.time() * 1000)), 'wb+')
    writer = csv.DictWriter(csv_file, fieldnames=headers_key.keys())
    writer.writeheader()
    writer.writerow(headers_key)
    fache()

这样做是不是方便了许多呢?欢迎讨论。如有好的想法作者会改正的。