json的优势:

1. 数据体积方面。

JSON相对于XML来讲,数据的体积小,传递的速度更快些。

2. 传输速度方面。

JSON的速度要远远快于XML

3. 数据格式

数据格式比较简单, 易于读写, 格式都是压缩的。

4. 与python的交互使用方便

json 是 k-v结构的形式,

简单来说, 如果是一个key,对应一个value.中间用 : 分隔,最外面用{}包围, 不同键值对之间用逗号,隔开

{‘key1’: 'value1', 'key2': 'value2', 'key3': 'value3'}

如果有一个Key对应着多个value的情况,用[]把对应的所有value包括起来。

{'key1': ['v11', 'v12', 'v13'], 'key2':'v22'}

复杂一点的还有这样的,不过其实原理都一样。

{"people":[{"firstName": "Brett","lastName":"McLaughlin"},{"firstName":"Jason","lastName":"Hunter"
}
]
}

  

json是什么呢?

  • 是一种轻量级的数据交换格式。
  • 完全独立于编程语言的文本格式来存储和表示数据。
  • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,易于机器解析和生成,并有效地提升网络传输效率。

json JavaScript Object Notation(JS对象标记)和JavaScript 的关系

JSON格式在语法上与创建JavaScript对象的代码相同。由于这种相似性,JavaScript程序可以轻松地将JSON数据转换为JavaScript对象。JavaScript是一种语言, 而json终其还是一种文本格式,是一堆字符串。

由于json是文本格式, 我们要用python去操纵它,首先需要把这种格式转换为python中的字典。

with open('finance/finance_company.json', encoding='utf-8') as f:line = f.readline()print(type(line))f.close()

输出结果:

<class 'str'> 

可以看出来,我们从json格式中读出来为str类型。  

我们调用json库的loads方法。

json.load(fpcls=Noneobject_hook=Noneparse_float=Noneparse_int=Noneparse_constant=Noneobject_pairs_hook=None**kw)

object_hook是一个可选的函数,它将被任何对象字面值解码(dict)的结果调用。将使用object_hook的返回值而不是dict。该特征可以用于实现定制解码器(例如,JSON-RPC类提示)。

object_pairs_hook是一个可选的函数,它将使用任何对象字面值的结果进行调用,并使用对的有序列表进行解码。将使用object_pairs_hook的返回值,而不是dict。该特征可以用于实现依赖于键和值对被解码的顺序的自定义解码器(例如,collections.OrderedDict()将记住插入的顺序)。如果还定义了object_hook,则object_pairs_hook优先。

parse_float(如果指定)将使用要解码的每个JSON浮点的字符串进行调用。默认情况下,这相当于float(num_str)。这可以用于使用另一个数据类型或解析器为JSON浮动(例如。decimal.Decimal)。

parse_int(如果指定)将使用要解码的每个JSON int的字符串进行调用。默认情况下,这相当于int(num_str)。这可以用于使用另一个数据类型或解析器为JSON整数(例如。float)。

parse_constant如果指定,将使用以下字符串之一调用:'-Infinity','Infinity','NaN'。这可以用于引发异常,如果遇到无效的JSON数字。

在版本3.1中更改: parse_constant不会在“null”,“true”和“false”上调用。

要使用自定义JSONDecoder子类,请使用cls kwarg;否则使用JSONDecoder。额外的关键字参数将被传递给类的构造函数。

json.loads(sencoding=Nonecls=Noneobject_hook=Noneparse_float=Noneparse_int=Noneparse_constant=Noneobject_pairs_hook=None**kw)

除了多了一个编码参数, 其余的都与json.load一样。

json.load用来加载文件, 而json.loads用来加载字符串(很明显,因为多了个s(string))

import jsonwith open('finance/finance_company.json', encoding='utf-8') as f:line = f.readline()d = json.loads(line)print(type(d))f.close()

输出:

<class 'dict'>

读取范例:

new.json

{"name": "异享金融", "company_url": "http://www.yixiangjinrong.com", "telphone": "0371-55056647", "crawl_time": "2017-07-13 16:11:16"}

  

readjson.py

import jsonwith open('test.json', encoding='utf-8') as f:line = f.readline()d = json.loads(line)name = d['name']company_url = d['company_url']telephone = d['telphone']crawl_time = d['crawl_time']print(name, company_url, telephone, crawl_time)f.close()

输出结果:

异享金融 http://www.yixiangjinrong.com 0371-55056647 2017-07-13 16:11:16

这样就成功的读取了json文件啦。

 

写json文件

json.dump(objfpskipkeys=Falseensure_ascii=Truecheck_circular=Trueallow_nan=Truecls=Noneindent=Noneseparators=Nonedefault=Nonesort_keys=False**kw)

json模块总是产生str对象,而不是bytes对象。因此,fp.write()必须支持str输入。

如果ensure_ascii为true(默认值),则输出将保证所有传入的非ASCII字符都转义。如果ensure_ascii为false,则这些字符将按原样输出。

如果check_circular为false(默认值:True),则将跳过容器类型的循环引用检查,循环引用将导致OverflowError

如果allow_nan为false(默认值:True),则将是ValueError序列化超出范围float值(nan,inf,-inf),严格遵守JSON规范。如果allow_nan为true,则将使用与其等效的JavaScript代码(NaN,Infinity,-Infinity)。

如果缩进是非负整数或字符串,那么JSON数组元素和对象成员将以该缩进级别打印。缩进级别0,负数或""将只插入换行符。None(默认值)选择最紧凑的表示。使用正整数缩进缩进,每个级别有许多空格。如果缩进是字符串(例如"\t"),则该字符串用于缩进每个级别。

如果sort_keys为真(默认值:False),则字典的输出将按键排序。

使用默认的 ensure_ascii=True时, json文件变成了这样:

{"name": "\u4e24\u53ea\u8001\u864e", "company_url": "http://www.twotiger.com/", "telphone": "010-64789918", "crawl_time": "2017-07-16 22:57:15"}

 ensure_ascii=Flase, 中文就成功出现

{"name": "异享金融", "company_url": "http://www.yixiangjinrong.com", "telphone": "0371-55056647", "crawl_time": "2017-07-13 16:11:16"}

因为该方法把我们的中文自动转义了, 变成了ASCII码, 所以导致了中文看着错乱了。加上这句就好了。

如何读取完整的文件

上面主要示例了json的使用。但是在实际开发过程中我们是需要对这个文件进行读取的。下面我们看看如何读取。

我们都应该知道python读取文件有三种方法。

read(), readline(), radlines()

read()直接读取出字符串,并且字符串或者字符对象返回。

readline() 读取文本中的一行

readlines() 读取文本中的所有内容并放入缓存区。

下面是使用的readline读取整个文本示例:

with open(file_path, 'r', encoding='utf-8') as f:try:while True:line = f.readline()if line:r = json.loads(line)# print(r)else:breakexcept:f.close()

这样就可以读取所有文本并解析成Python可以操作的数据模式了

 

python 读写 json文件相关推荐

  1. python 读写json文件

    1. python中和json读写相关的主要是json模块的以下四个函数: dumps() 将一个python对象编码为json对象 loads() 讲一个json对象解析为python对象 dump ...

  2. python读写json文件

    2019独角兽企业重金招聘Python工程师标准>>> 创建json文件: {     "fontFamily": "微软雅黑",     & ...

  3. Python读写json文件的简单实现

    转载自https://blog.csdn.net/vitaminc4/article/details/77985175 介绍 JSON(JavaScript Object Notation) 是一种轻 ...

  4. Python读写json文件中文编码问题

    Python的编码问题还是很让我这个菜鸡头疼的,做下笔记,帮助别人,也帮助自己记忆 总所周知,json.dumps()函数实现将一个字典转换成str(俗称美化,也就是让输出的结果好看点-) 但有很大的 ...

  5. python:json文件的保存与读取

    介绍 json(JavaScript Object Notation, Java 脚本对象表示符)是一种特殊的数据格式,具有以下优点. (1)该数据格式独立于脚本语言(如c++,python,matl ...

  6. python json loads_python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)...

    JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. 1.json.dumps()和json.loads()是json ...

  7. python读取csv文件的方法-python读写csv文件的方法

    1.爬取豆瓣top250书籍 import requests import json import csv from bs4 import BeautifulSoup books = [] def b ...

  8. csv 字符串_爬虫|python读写csv文件的方法完成生涯规划表

    前面用PrettyTable制作了生涯规划表,今天突然想到其实可以用Python读写Excel文件,还可以制作Excel表格,相对而言,感觉csv的读写更简单,所以决定用csv改写生涯规划案例,以后教 ...

  9. python中json文件处理涉及的四个函数json.dumps()和json.loads()、json.dump()和json.load()的区分

    一.概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()将字典转化为字符串 (2)json.load ...

最新文章

  1. A - Expanding Rods POJ - 1905(二分)
  2. SAP HUM 嵌套HU初探 IV
  3. 珠海网络推广浅析网站优化面对搜索引擎算法更新怎样才能应对自如?
  4. java吃豆游戏_利用java编写的精灵吃豆的游戏
  5. Matlab实用程序--图形应用-双y轴图形的绘制
  6. facebook海量图片存储系统与淘宝TFS系统比较
  7. java https通讯_Kubernetes - HTTPS在服务之间进行通信
  8. c如何返回数组给java
  9. XmlReader 内部使用NameTable
  10. Windows 2000服务器安全配置精华技巧
  11. 初中生学python教材推荐_推荐中学生看的几本书
  12. 「leetcode」654.最大二叉树(详解)
  13. 在JavaScript面向对象编程中使用继承(4)
  14. JAVA 内部类 泛型 实现堆栈
  15. 2-visio使用与卸载
  16. ug建模减速器_UG齿轮减速器建模方法
  17. express框架下载及使用
  18. QCC304x系列开发教程(实战篇) 之7.2 QCC3040之主副耳切换过程详解
  19. vite.config 配置文件
  20. 裤子尺码对照表eur40_裤子尺寸对照表,衣服尺寸对照表,服装尺寸对照表- 尺码对照表...

热门文章

  1. laravel admin 根绝model创建控制器路由命令
  2. ASP.NET Web 页面生命历程中的一天
  3. ThinkPHP实现支付宝接口功能
  4. Spring Cloud微服务系列-Eureka Client源码解析(二)
  5. docker-compose参数介绍
  6. 什么是Spring EL表达式
  7. Dubbo之Filter链原理
  8. Spring中的@Value注解详解
  9. tomcat基础架构剖析
  10. python使用百度OCR图片验证码