zoukankan      html  css  js  c++  java
  • Python中的json模块

    在Python内置函数中,有一个eval()函数可以将字符串内容转换成Python对象,比如我现在将一个字典 dic = {"name":"pengfy"}写到一个叫hello的文件中,再读取出来的结果就变成字符串了,在json中,json.loads也有一样的作用,但是在一些特殊情况下,eval就不适用了,这时候还是要专业的json模块进行转换。

    # 写入文件
    dic='{"name":"pengfy"}'
    f=open("hello","w")
    f.write(dic)
    
    # eval()方法
    f_read=open("hello","r")
    data=f_read.read()
    print(type(data))    #  <class 'str'>
    data=eval(data)
    print(data["name"]) # pengfy
    
    # json方法
    f_read=open("hello","r")
    data = json.loads(f_read.read())
    print(data)   #{'name': 'pengfy'}
    print(data['name'])   # pengfy

    JSON

    对web开发有兴趣的同学都知道,如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:

     序列化

           序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。

    下面使用json演示序列化过程:

    import json
    
    # 序列化
    dic={'name':'alex'}
    f=open("new_hello","w")
    
    dic_str=json.dumps(dic)
    f.write(dic_str)    #这里和json.dump(dic,f)作用一样

    以上需要强调几点:

       dic中的内容都是单引号,但是写入文件后,都会变成双引号,不信可以试试。这里面变化就是:

    {'name':'pengfy'}---->{"name":"pengfy"}---->'{"name":"pengfy"}'
    上面光说的字典,其他数据也是一样的,比如:
     i=8                 ---->'8'
    s='hello' ---->"hello"----->'"hello"'
    l=[11,22] ---->"[11,22]"
    下面看一下json怎么反序列化的:
    f_read=open("new_hello","r")
    data=json.loads(f_read.read())      # data=json.load(f)
    
    print(data["name"])  # pengfy
    print(data)          #{'name': 'pengfy'}
    print(type(data))    #<class 'dict'>

    我们看到上面的dumps和loads,dump和load都是成双成都出现的,但是只要满足json格式要求,都可以直接用loads或load导出来,比如:

    dic_str = "{'name':'pengfy'}"
    data = json.loads(dic_str)
    print(data)   #直接报错
    
    dic_str = '{"name":"pengfy"}'
    data = json.loads(dic_str)
    print(data)  #{'name': 'pengfy'}

    这么看来,json模块也可以简单的掌握。



  • 相关阅读:
    js克隆
    一些笔试题
    js的严谨模式
    Docker之Compose服务编排
    最近5年183个Java面试问题列表及答案[最全]
    Rancher概述
    迭代器和生成器
    Prometheus 安装
    Prometheus 介绍
    装饰器函数
  • 原文地址:https://www.cnblogs.com/pengfy/p/10551093.html
Copyright © 2011-2022 走看看