• json 和 pickle


    json 和 pickle

    用于序列化的两个模块

    json,用于字符串 和 python数据类型间进行转换
    pickle,用于python特有的类型 和 python的数据类型间进行转换

    json模块提供了四个功能:dumps、dump、loads、load
    pickle模块提供了四个功能:dumps、dump、loads、load

    json dumps把数据类型转换成字符串 

            dump把数据类型转换成字符串并存储在文件中 

            loads把字符串转换成数据类型  

            load把文件打开从字符串转换成数据类型

    可以看到直接对文件的操作都是不带“s” 的dump和load,直接对内存操作的都是带“s”的。

    pickle同理


    现在有个场景在不同设备之间进行数据交换很low的方式就是传文件,dumps可以直接把服务器A中内存的东西发给其他服务器,比如B服务器、
    在很多场景下如果用pickle的话那A的和B的程序都的是python程序这个是不现实的,很多时候都是不同的程序之间的内存交换怎么办?就用到了json
    并且json能dump的结果更可读,那么有人就问了,那还用pickle做什么不直接用json,是这样的,json只能把常用的数据类型序列化(列表、字典、列表、字符串、数字),像日期格式、类对象 json就不行了,只有用pickle
    为什么他不能序列化上面的东西呢?因为json是跨语言的!


    我们看个json的小例子:

    1. import requests
    2. import json
    3. response = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=北京')
    4. response.encoding = 'utf-8'
    5. dic = json.loads(response.text)
    6. print(type(dic))
    7. print(dic)
    8. print(dic['data']['city'])
    输出截图:
     这是数据在内存时的处理,我们在看一个数据在文件的处理:
    数据在文件内的存储格式:
    1. [
    2. {"title": ["javau722cu866bu6293u53d6qqu7fa4u6570u636e"], "reply": ["4"], "author": ["zzy64421"]},
    3. {"title": ["u6709u5927u795eu6709P2Pu7684u6570u636eu5417"], "reply": ["1"], "author": ["u6709u70b9u5c0fu538cu4e16"]},
    4. {"title": ["u60f3u722cu8d76u96c6u7f51uff0cu8bbfu95eeu592au5febu8981u8f93u9a8cu8bc1u7801uff0cu600eu4e48u7834"], "reply": ["7"], "author": ["u94c1u8840u591cu5e1d"]},
    5. {"title": ["30u5143u6c42u5199u4e00u7f51u9875u722cu866b"], "reply": ["4"], "author": ["Cu8c6ay"]},
    6. {"title": ["u767eu5ea6u8d34u5427u4e2du7684u697cu5c42u56deu590du600eu4e48u83b7u53d6u5462"], "reply": ["21"], "author": ["u5c0fu50bbu86cbu5a03u5a03"]},
    7. {"title": ["u6c42u52a9u7f8eu56e2u5916u5356u7684u722cu866bu6570u636e"], "reply": ["0"], "author": ["u5de6u4ed3u871cu67d1"]},
    8. {"title": ["u6709u6ca1u6709u9700u8981u5e2eu5fd9u722cu53d6u6570u636eu7684uff1fu6216u8005u505au722cu866bu7c7bu8bfeu9898u7684uff1fu57fau4e8eJAVA"], "reply": ["51"], "author": ["fhg1225"]},
    9. {"title": ["u6c42u53efu4ee5u722c58u540cu57ceuff0cu8d76u96c6u7f51u6570u636eu7684u722cu866bu3002"], "reply": ["9"], "author": ["200901491"]},
    10. {"title": ["u6709u722cu866bu8f6fu4ef6u53efu4ee5u91c7u96c6u5faeu535au3001u8d34u5427u3001u77e5u4e4eu7684u4e48uff1f"], "reply": ["3"], "author": ["u738bu9053u653bu7565"]}
    11. ]
    整体来看这是个列表,列表内每个元素都是个字典。
    1. import json
    2. f = open('items.json')
    3. a = json.load(f)
    4. print(type(a))
    5. print(a[0])
    6. print(a[0]['author'])
    7. f.close()
    输出结果:

    通过这两个例子我们看到了json的用法,也能体会出load和loads的区别了。 


    【注】字符串内部必须使用双引号如:"reply": ["3"],不能写成:'reply': ['3']. 
    因为json是跨语言的,其他语言是使用双引号表示字符串的,所以在python中一定注意这一点




  • 相关阅读:
    Spring MVC 入门示例讲解
    使用Word2013,发布博文到博客园
    走过2103,迈向2014
    C#中的字符串拼接@,$
    ORA-22922:nonexistent LOB value问题及listagg()函数
    证明一个数是不是存在于该数组中
    论java中System.arrayCopy()与Arrays.copyOf()的区别
    JSP中获取各种路径的方法
    JavaScript中变量声明有var和没var的区别
    JavaScript:理解事件循环
  • 原文地址:https://www.cnblogs.com/wumingxiaoyao/p/7047779.html
Copyright © 2020-2023  润新知