爬虫学习(十五)——json解析
json与jsonpath
对象{}:jsonobject
对象:对象在js中表现为{}括起来的内容,数据结构为{key:value,key:value...}键值对的结构,在面向对象的结构中,key为对象的属性,key所对应的value为对象的属性值。
取值方式:对象.key 获取属性值,这个属性值的数据类型可以是数字、字符串、数据、对象等
数组[]:JSONArray
数组:在js中是中括号[]括起来的内容,数据结构类似此格式["Python", "javascript", "C++", ...]
取值方式:类似python语言中的列表,使用索引进行取值,数组中的值可以是数字、字符串、数组、对象等
json方法
1、load()将数据加载成为json类型的数据
读取json文件中的字符串,转化成为python数据类型
如:
obj = json.load(open('book.json', 'r', encoding='utf-8'))
print(type(obj))
2、loads()解码json字符串为json数据
将json格式字符串解码转换成为python对象,从json到python的数据数据转化类型可以对照图表

with open('./book.json',mode='r',encoding='utf-8') as f:
json_string = f.read()
# 将json格式字符串转化为对象
obj = json.loads(json_string)
print(type(obj))
3、string串
将json数据
4、dumps()
实现python数据类型转化成为json字符串,返回一个str对象,把python对象编码转换成为json字符串
从python原始类型向json类型转化的对照表如下:

如下:
import json
str = '''{"has_more": false, "message": "success", "data": [{"single_mode": true, "abstract": "\u8c22\u8c22\u5927\u5bb6\u559c\u6b22\u6bcf\u65e5\u64b8"}]}'''
print(type(str))
print(json.dumps(str,ensure_ascii=False))
5、dump
将python类型序列化成json对象后写入文件
如:
import json
dictStr = {"city": "北京", "name": "大刘",'info':'\u8c22\u8c22\u5927'}
# Serialize ``obj`` as a JSON formatted stream to ``fp
json.dump(dictStr, open("dictStr.json","w",encoding='utf-8'), ensure_ascii=False,)
6、练习总结
import json
# 将文件中的文件读取处理,输出的数据类型为流(字符序列)数据
fp = open("json数据.json",mode="r",encoding="utf8")
# 将流数据加载变成json类型的数据
j = json.load(fp)
print(j,type(j))
# 输出结果:
# {'book': [{'name': '时间简史', 'author': '斯蒂芬·威廉·霍金'}, {'name': '三国演义', 'author': '罗贯中'}]} <class 'dict'> # 将json类型的数据转化成为python的字符串类型的数据,并将中文的阿斯克码形式转化成中文
a = json.dumps(j,ensure_ascii=False)
print(a,type(a))
# 输出结果
# {"book": [{"name": "时间简史", "author": "斯蒂芬·威廉·霍金"}, {"name": "三国演义", "author": "罗贯中"}]} <class 'str'> # 创建一个json格式的文件
fp2 =open("json练习二.json",mode="a",encoding="utf8") # 将json数据写入文件中,并将阿斯克码转换设置为False
json.dump(j,fp2,ensure_ascii=False)
爬虫学习(十五)——json解析的更多相关文章
- scrapy爬虫学习系列五:图片的抓取和下载
系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备: http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...
- c++11-17 模板核心知识(十五)—— 解析模板之依赖型类型名称与typename Dependent Names of Types
模板名称的问题及解决 typename规则 C++20 typename 上篇文章c++11-17 模板核心知识(十四)-- 解析模板之依赖型模板名称 Dependent Names of Templ ...
- 聊聊高并发(二十五)解析java.util.concurrent各个组件(七) 理解Semaphore
前几篇分析了一下AQS的原理和实现.这篇拿Semaphore信号量做样例看看AQS实际是怎样使用的. Semaphore表示了一种能够同一时候有多个线程进入临界区的同步器,它维护了一个状态表示可用的票 ...
- 强化学习(十五) A3C
在强化学习(十四) Actor-Critic中,我们讨论了Actor-Critic的算法流程,但是由于普通的Actor-Critic算法难以收敛,需要一些其他的优化.而Asynchronous Adv ...
- 渗透测试学习 十五、 文件上传&&解析漏洞
大纲:文件解析漏洞 上传本地验证绕过 上传服务器验证绕过 文件解析漏洞 解析漏洞主要说的是一些特殊文件被IIS.Apache.Nginx在某些情况下解释成脚本文件格式的漏洞. IIS 5.x/6.0解 ...
- Java开发学习(十五)----AOP入门案例及其工作流程解析
一.AOP简介 1.1 什么是AOP AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构. OOP(Object Oriented ...
- [Python爬虫] 之十五:Selenium +phantomjs根据微信公众号抓取微信文章
借助搜索微信搜索引擎进行抓取 抓取过程 1.首先在搜狗的微信搜索页面测试一下,这样能够让我们的思路更加清晰 在搜索引擎上使用微信公众号英文名进行“搜公众号”操作(因为公众号英文名是公众号唯一的,而中文 ...
- Python爬虫学习==>第五章:爬虫常用库的安装
学习目的: 爬虫有请求库(request.selenium).解析库.存储库(MongoDB.Redis).工具库,此节学习安装常用库的安装 正式步骤 Step1:urllib和re库 这两个库在安装 ...
- Salesforce LWC学习(十五) Async 以及 Picklist 公用方法的实现
本篇参考:salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type) https://developer.salesfo ...
- salesforce lightning零基础学习(十五) 公用组件之 获取表字段的Picklist(多语言)
此篇参考:salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type) 我们在lightning中在前台会经常碰到获取pi ...
随机推荐
- Git 打补丁流程
A. 使用git制作补丁时, 需要创建一个新的分支, 修改之后再提交只需要修改需要修改的文件, 并使用git -format-patch -M master 将当前的分支与主分支(master)进行比 ...
- Angularjs ui router,路由嵌套 父controller执行问题
解决方式来源:https://stackoverflow.com/questions/25316591/angularjs-ui-router-state-reload-child-state-onl ...
- logback配置说明
我觉得对于logback大家不太明白的有:过滤器.logger和root以及其中的一些属性的关系.其他的应该不是多迷糊,所以我就主要说说这几个的关系,并且为了清晰我只说控制台日志,写到文件的日志配置大 ...
- Bootstrap知识点梳理
- layui文档阅读进度
2017年1月9日22:13:28已看完layer弹出层部分 2017年1月9日19:15:55http://www.layui.com/doc/modules/layer.html#layer.lo ...
- OpenCV-3.4.2基于Qt-5.10.1的编译
OpenCV-3.4.2基于Qt-5.10.1的编译 由于本人在使用CMake和MinGW编译OpenCV是遇到了很多问题,在这里记录下来.至于所需软件的安装和相应环境变量的设置,网上有很多详细的教程 ...
- php 调用微信虚拟支付
摘要:小游戏对接微信虚拟支付,需要自己的后台调用微信的虚拟支付接口,微信的文档实在烂,总结走过的坑. 1.报错{errcode:90007,errmsg:invalid openid} 无效的open ...
- 如何利用BAPI SD_SALESDOCUMENT_CHANGE修改Sales Order的字段
假设我想修改S/4HANA里Sales Order抬头的Service Date字段SERV_DATE: 首先从数据库表VBKD里查找到SERV_DATE修改之前的值为2020年1月1日 使用如下代码 ...
- 1923. Scary Politics (timus) (dfs) search
http://acm.timus.ru/problem.aspx?space=1&num=1923 -- timus This is s problem about thd dfs and s ...
- ie6下按钮下边框消失不显示的问题
最近网站做改版,又发现一个ie6奇葩的问题,就一个很普通带边框的按钮,但在ie6中下边框不显示,ie7没有测试不知道是不是也不显示,其他浏览器正常 代码和预览效果如下: <style> b ...