在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模块也可以简单的掌握。

												

Python中的json模块的更多相关文章

  1. python中的 json 模块使用

    (1)python 中生成 json 字符串: import json data = dict(ret=0, msg="Welcome, Login success!") json ...

  2. python中序列化json模块和pickle模块

    内置模块和第三方模块 json模块和pickle 模块(序列化模块) 什么是序列化? 序列化就是将内粗这种的数据类型转成另一种格式 序列化:字典类型——>序列化——>其他格式——>存 ...

  3. Python中的Json模块dumps、loads、dump、load函数介绍

    Json模块dumps.loads.dump.load函数介绍 1.json.dumps() json.dumps() 用于将dict类型的数据转成str,因为如果直接将dict类型的数据写入json ...

  4. Python 3 中的json模块使用

    1. 概述 JSON (JavaScript Object Notation)是一种使用广泛的轻量数据格式. Python标准库中的json模块提供了JSON数据的处理功能. Python中一种非常常 ...

  5. 在 Python 中使用 JSON

    在 Python 中使用 JSON 本教程将会教我们如何使用 Python 编程语言编码和解码 JSON.让我们先来准备环境以便针对 JSON 进行 Python 编程. 环境 在我们使用 Pytho ...

  6. python中的json的基本使用方法

    在python中使用json的时候,主要也就是使用json模块,json是以一种良好的格式来进行数据的交互,从而在很多时候,可以使用json数据格式作为程序之间的接口, #!/usr/bin/env ...

  7. Python中的random模块,来自于Capricorn的实验室

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  8. Python中的logging模块

    http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...

  9. Python中的random模块

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

随机推荐

  1. MyBatis insert/delete/update 的返回值

    insert,返回值是:新插入行的主键(primary key):需要包含<selectKey>语句,才会返回主键,否则返回值为null. <insert id="inse ...

  2. 工具系列-idea破解

    >>>>>>>>>>>>>>>>>>>>>>>>> ...

  3. MVC中ztree异步加载

    var setting = { async: { enable: true, url: "*****/LoadChild", autoParam: ["id"] ...

  4. 我的Python笔记04

    摘要: 声明:本文整理借鉴金角大王的Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件 ...

  5. java类路径classpath

    java编译器编译.java文件和java虚拟机执行.class文件时的路径和写法不一样. 在没有设置任何classpath环境变量的情况下,javac可以编译全路径的.java文件.例如: java ...

  6. K-means算法性能评估及其优化

    1. SSE误差平方和(Sum of Square due to Error): 聚类情况: 计算公式: 注:SSE参数计算的内容为当前迭代得到的中心位置到各自中心点簇的欧式距离总和,这个值越小表示当 ...

  7. leetcode刷题五<最长回文子串>

    下面是题目的描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 . 示例 : 输入: "babad" 输出: "bab" 注意: ...

  8. Scrapy框架之CrawlSpider

    提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二:基 ...

  9. corel

    corel CorelDRAW X6 Corel CorelCAD 2017 32位/64位破解版

  10. 谈谈Java的classpath

    Java之ClassPath 大家刚开始写Java代码的时候,如果使用Eclipse作为IDE,同时需要引用其他的类库,一般会有如下操作 在工程中新建lib目录 将jar包复制到lib目录下 右键单击 ...