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解析的更多相关文章

  1. scrapy爬虫学习系列五:图片的抓取和下载

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

  2. c++11-17 模板核心知识(十五)—— 解析模板之依赖型类型名称与typename Dependent Names of Types

    模板名称的问题及解决 typename规则 C++20 typename 上篇文章c++11-17 模板核心知识(十四)-- 解析模板之依赖型模板名称 Dependent Names of Templ ...

  3. 聊聊高并发(二十五)解析java.util.concurrent各个组件(七) 理解Semaphore

    前几篇分析了一下AQS的原理和实现.这篇拿Semaphore信号量做样例看看AQS实际是怎样使用的. Semaphore表示了一种能够同一时候有多个线程进入临界区的同步器,它维护了一个状态表示可用的票 ...

  4. 强化学习(十五) A3C

    在强化学习(十四) Actor-Critic中,我们讨论了Actor-Critic的算法流程,但是由于普通的Actor-Critic算法难以收敛,需要一些其他的优化.而Asynchronous Adv ...

  5. 渗透测试学习 十五、 文件上传&&解析漏洞

    大纲:文件解析漏洞 上传本地验证绕过 上传服务器验证绕过 文件解析漏洞 解析漏洞主要说的是一些特殊文件被IIS.Apache.Nginx在某些情况下解释成脚本文件格式的漏洞. IIS 5.x/6.0解 ...

  6. Java开发学习(十五)----AOP入门案例及其工作流程解析

    一.AOP简介 1.1 什么是AOP AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构. OOP(Object Oriented ...

  7. [Python爬虫] 之十五:Selenium +phantomjs根据微信公众号抓取微信文章

    借助搜索微信搜索引擎进行抓取 抓取过程 1.首先在搜狗的微信搜索页面测试一下,这样能够让我们的思路更加清晰 在搜索引擎上使用微信公众号英文名进行“搜公众号”操作(因为公众号英文名是公众号唯一的,而中文 ...

  8. Python爬虫学习==>第五章:爬虫常用库的安装

    学习目的: 爬虫有请求库(request.selenium).解析库.存储库(MongoDB.Redis).工具库,此节学习安装常用库的安装 正式步骤 Step1:urllib和re库 这两个库在安装 ...

  9. Salesforce LWC学习(十五) Async 以及 Picklist 公用方法的实现

    本篇参考:salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type) https://developer.salesfo ...

  10. salesforce lightning零基础学习(十五) 公用组件之 获取表字段的Picklist(多语言)

    此篇参考:salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type) 我们在lightning中在前台会经常碰到获取pi ...

随机推荐

  1. 支付宝php支付接口说明

    直接把该代码放到PHP服务器下,直接访问index.php.1.文件列表: alipay_config.php    (基本参数配置页面,填写商家的支付宝安全校验码,合作id,支付宝帐号等内容)ind ...

  2. Java工具-检验ftp服务器的指定文件是否存在

    项目工作中,需要检验ftp服务器中指定文件是否存在,在网上查阅了相关资料,可以通过ftpClient类进行实现. import org.apache.commons.net.ftp.FTP; impo ...

  3. android 官网访问不了

    网上搜到的解决方案,亲测有用.记下来,以备遗忘. 使用管理员权限,修改C:\Windows\System32\Drivers\etc\hosts文件,加入以下内容 173.194.127.7 deve ...

  4. 使用Aspose.Cell控件实现Excel高难度报表的生成

    1.使用Aspose.Cell控件实现Excel高难度报表的生成(一) http://www.cnblogs.com/wuhuacong/archive/2011/02/23/1962147.html ...

  5. iOS开发实践之多线程(单例模式)

    单例模式的作用:可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源. 单例模式的使用场合:在这个应用程序中,共享一份资源(这份资源只需要创建 ...

  6. Container&injection(容器与注入思想)

    container 为了更好理解JAVA容器,查询了容器的概念以及容器的诞生原因和历史: 容器技术是怎么一个概念呢?其实,IT里的容器技术是英文单词Linux Container的直译.contain ...

  7. carousel 插件隐藏列表中几项导致左右切换出错

    1. 一般的应用场景: 用于左右快速切换显示的列表内容,比如对员工的切换. 对于这种情况必不可少需要按照部门进行搜索,目前我的做法是首次加载所有该用户可以查看的员工列表,选择部门后又选择的隐藏掉其他不 ...

  8. 动态计算UITableViewCell高度详解 (转)

    感觉挺有用的一篇文章,分析了4种解决方案.回头测试之.如果有别的方案,我会在后面补上. 原文地址:http://www.ifun.cc/blog/2014/02/21/dong-tai-ji-suan ...

  9. React 复合组件

    var Avatar = React.createClass({ render: function() { return ( <div> <ProfilePic username={ ...

  10. Thymeleaf基础知识

    Thymeleaf是一个Java类库,它是一个xml/xhtml/html5的模板引擎,可以作为MVC的Web引用的View层. Thymeleaf还提供了额外的模块与SpringMVC集成,因此推荐 ...