爬虫学习(十五)——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 ...
随机推荐
- 关于EasyUI datagrid 表头居中 数据列内容居右 或者居左
cell.css("text-align",(col.halign||col.align||"")); 这里有个属性挺眼熟 : col.align 前面还有一个 ...
- Python built-in 函数
一.abs(x) 说明:返回绝对值 参数可以是:负数.正数.浮点数或者长整形 实例: abs(-1.2) #返回 1.2 abs(1.2) #返回 1.2 abs(-11216.5) #返回 1121 ...
- 简单封装的web里面的tab点击和swipe滑动的小插件
简单封装的一个web的手势,tab和swipe,里面的具体数值都是自定义上去的,没有实际的标准,可以自行去修改都行 前两个是详解,js插件在最后一部分代码 ``` //封装web的tab步骤详解 &l ...
- 伪响应式开发(PC和Mobile分离)
screen.width 无论把浏览器缩小还是放大,screen.width的值都不会改变,但是IE9及以上浏览器才支持这个属性. @media screen 媒体查询的巨大缺陷:切换页面布局的时候J ...
- <Android 基础(十)> FloatingActionButton
介绍 Source Code中的介绍如下: Floating action buttons are used for a special type of promoted action. They a ...
- Android基础Activity篇——Intent向下一个活动传递数据
1.向下一个活动传递数据 String data ="bilibilbilbilbili"; Intent intent1=new Intent(this,secondActivi ...
- oracle自动异地备份数据库
需求:实现oracle自动异地备份数据库 分析:1.oracle备份数据库 2.自动备份(定时) 3.非本地备份(因为如果备份到本地的话,如果硬件设备损坏可能导致数据丢失) 知识点:1.备 ...
- java——类加载机制
类加载机制 JVM把class文件加载的内存,并对数据进行校验.转换解析和初始化,最终形成JVM可以直接使用的Java类型的过程就是加载机制. 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的生命 ...
- 如何在CRM WebClient UI里使用HANA Live Report
1. 使用业务角色ANALYTICSPRO登录SAP CRM WebClient UI: 点击新建按钮创建一个新的HANA live report: 类型选择SHL: 弹出窗口,维护report的名称 ...
- python pip安装报错python setup.py egg_info failed with error code 1
安装locust遇到点问题折腾了好一会儿,记录一下. 使用命令pip install locustio提示python setup.py egg_info failed with error cod ...