json字符串的数据提取

json的数据提取

学习目标
  1. 掌握 json相关的方法(load loads dump dumps)
  2. 了解 jsonpath的使用(提取 json中的数据)

2 复习什么是json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。

3 json模块中方法的学习

其中类文件对象的理解:

具有read()或者write()方法的对象就是类文件对象,比如f = open(“a.txt”,”r”) f就是类文件对象

具体使用方法:

import jsonmydict = {"store": {"book": [{"category": "reference","author": "Nigel Rees","title": "Sayings of the Century","price": 8.95},{"category": "fiction","author": "Evelyn Waugh","title": "Sword of Honour","price": 12.99},],}
}# json.dumps 实现python类型转化为json字符串
# indent实现换行和空格
# ensure_ascii=False实现让中文写入的时候保持为中文
json_str = json.dumps(mydict, indent=2, ensure_ascii=False)
print('json.dumps python_type-->json_str: {}'.format(type(json_str)))# json.loads 实现json字符串转化为python的数据类型
my_dict = json.loads(json_str)
print('json.loads json_str-->python_type: {}'.format(type(my_dict)))# json.dump 实现把python类型写入类文件对象
with open("json模块示例文件.txt", "w") as f:json.dump(mydict, f, ensure_ascii=False, indent=2)
input('json.dump 已成功写入文件')# json.load 实现类文件对象中的json字符串转化为python类型
with open("json模块示例文件.txt", "r") as f:my_dict = json.load(f)print('json.load 读取文件--> {}: {}'.format(type(my_dict), my_dict))

4 jsonpath模块的学习

4.1 jsonpath介绍

用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。

4.2 JsonPath 对于 JSON 来说,相当于 XPath 对于 XML。
    安装方法:pip install jsonpath官方文档:http://goessner.net/articles/JsonPath
4.3 JsonPath语法:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.4 语法使用示例
book_dict = { "store": {"book": [ { "category": "reference","author": "Nigel Rees","title": "Sayings of the Century","price": 8.95},{ "category": "fiction","author": "Evelyn Waugh","title": "Sword of Honour","price": 12.99},{ "category": "fiction","author": "Herman Melville","title": "Moby Dick","isbn": "0-553-21311-3","price": 8.99},{ "category": "fiction","author": "J. R. R. Tolkien","title": "The Lord of the Rings","isbn": "0-395-19395-8","price": 22.99}],"bicycle": {"color": "red","price": 19.95}}
}from jsonpath import jsonpathprint(jsonpath(book_dict, '$..author')) # 如果取不到将返回False # 返回列表,如果取不到将返回False

JSONPath | Result

  • | -
    $.store.book[*].author | store中的所有的book的作者
    $..author | 所有的作者
    $.store.*| store下的所有的元素
    $.store..price |store中的所有的内容的价格
    $..book[2] | 第三本书
    $..book[(@.length-1)] | $..book[-1:] | 最后一本书
    $..book[0,1] | $..book[:2] |前两本书
    $..book[?(@.isbn)] | 获取有isbn的所有数
    $..book[?(@.price<10)] |获取价格大于10的所有的书
    $..* | 获取所有的数据
4.5 代码示例:

我们以拉勾网城市JSON文件 http://www.lagou.com/lbs/getAllCitySearchLabels.json 为例,获取所有城市的名字的列表,并写入文件。

import requests
import jsonpath
import json# 获取拉勾网城市json字符串
url = 'http://www.lagou.com/lbs/getAllCitySearchLabels.json'
headers = {"User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"}
response =requests.get(url, headers=headers)
html_str = response.content.decode()# 把json格式字符串转换成python对象
jsonobj = json.loads(html_str)# 从根节点开始,获取所有key为name的值
citylist = jsonpath.jsonpath(jsonobj,'$..name')# 写入文件
with open('city_name.txt','w') as f:content = json.dumps(citylist, ensure_ascii=False)f.write(content)

小结

  1. json的概念(JavaScript Object Notation)和json的作用数据交互时的一种数据格式
  2. json模块中操作字符串和python类型互转的方法是dump,load
  3. json模块中操作文件和python类型互转的方法是dumps,loads
  4. jsonpath模块的安装 pip install jsonpath
  5. jsonpath的解析根节点:$
  6. jsonpath的解析子节点:.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/279672.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode: 173. 二叉搜索树迭代器 + dfs + 二叉搜索树】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

docker入门(五)—— 小练习,docker安装nginx、elasticsearch

练习 docker 安装 nginx # 搜素镜像 [rootiZbp15293q8kgzhur7n6kvZ home]# docker search nginx NAME DESCRIPTION STARS OFFICIAL nginx …

SpringBoot中使用验证码easy-captcha

easy-captcha使用的大概逻辑: 当一个请求发送到后端服务器请求验证,服务器使用easy-captcha生成一个验证码图片,并通过session将验证信息保存在服务器,当用户登录校验时候,会从ession中取出对比是否一致 但是前后端分离之后 由于跨域问题 以上就无法实现了 下面这种情况没…

SpringBoot打造企业级进销存储系统 第五讲

package com.java1234.repository;import com.java1234.entity.Menu; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query;import java.util.List;/*** 菜单Repository接口*/ public interface MenuReposit…

【机器学习-05】模型的评估与选择

在前面【机器学习-01】机器学习基本概念与建模流程的文章中我们已经知道了机器学习的一些基本概念和模型构建的流程&#xff0c;本章我们将介绍模型训练出来后如何对模型进行评估和选择等 1、 误差与过拟合 学习器对样本的实际预测结果与真实值之间的差异&#xff0c;我们称之…

小米手机官方解锁

1、官方说要申请&#xff0c;还要等几天&#xff0c;反正现在2024-03-20是不需要的&#xff0c;直接下载解锁工具 2、解锁工具下载 3、工具登录后按钮一直灰色&#xff0c;我跑去下载了个驱动根本没用。正确方法是按照上面说的操作后&#xff0c;进入那个有个兔子戴帽子的状态…

Mock.js了解(Mock就是模拟一个后端,Postman模拟前端)

Mock.js 基于 数据模板 生成模拟数据。基于 HTML模板 生成模拟数据。拦截并模拟 ajax 请求。 基本语法 DTD&#xff08;数据模板定义规范&#xff09; 数据模板的每个属性由3部分构成&#xff1a;属性名、生成规则、属性值&#xff08;‘name|rule’: value&#xff09; 属性名…

pytorch 实现线性回归(Pytorch 03)

一 从零实现线性回归 1.1 生成训练数据 原始 计算公式&#xff0c; 我们先使用该公式生成一批数据&#xff0c;然后使用 结果数据去计算 计算 w1, w2 和 b。 %matplotlib inline import random import torch from d2l import torch as d2ldef synthetic_data(w, b, num_ex…

[蓝桥杯 2015 省 B] 生命之树

水一水的入门树形DP #include<iostream> #include<algorithm> #include<vector> using namespace std; using ll long long; #define int long long const int N 2e610; const int inf 0x3f3f3f3f; const int mod 1e97;int n; int w[N]; vector<vecto…

播下代码的种子,收获应用的果实

春分时节&#xff0c;大地回暖&#xff0c;万物复苏&#xff0c;生机勃勃。这是一个充满活力和希望的季节&#xff0c;也是启动新计划和项目的绝佳时机。在这个充满希望的季节里&#xff0c;Codigger作为一款强大的工具&#xff0c;正等待着为您的项目和计划提供坚实的支持。 C…

【Python循环6/6】循环的综合运用

目录 回顾 for循环遍历列表 for循环进行累加/累乘的计算 复杂的条件判断 嵌套 嵌套循环 练习 遍历整数列表 总结 回顾 在之前的博文中&#xff0c;我们学习了for计数循环&#xff1b;while条件循环&#xff1b;以及跳出循环的两种方法break&#xff0c;continu…

相机拍照与摄影学基础

1.相机拍照 相机可能形状和大小不同&#xff0c;但基本功能相同&#xff0c;包括快门速度、光圈和感光度&#xff0c;这些是摄影的通用概念。即使是一次性相机也是基于这三个理念工作的。不同类型相机在这三个概念上的唯一区别是你可以控制这些功能的程度。这三个参数被称为相…

爬虫Day3

用到的网页--豆瓣电影Top250 需要爬取信息&#xff1a; 数据保存在网页源代码中&#xff0c;是服务加载方式。先拿到网页源代码--request。再通过re提取想要的信息---re。 新知识&#xff1a;用csv存数据&#xff0c;可以用excel表格展示数据 import csv result obj.findite…

外包干了28天,技术退步明显......

说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入深圳某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&a…

[项目设计]基于websocket实现网络对战五子棋

项目介绍 该项目旨在实现一个网页端的在线五子棋&#xff0c;将实现登陆、好友、房间、对战、观战、聊天等功能 完成该项目需要了解C、数据库MySQL、基础前端HTML/CSS/JS/Ajax、网络协议WebSocket 项目源码&#xff1a;azhe1/online_gobang - 码云 - 开源中国 (gitee.com) …

【Spring Cloud Gateway】路由配置uri三种方式及区别

websocket配置方式 ws:// 或 wss:// 开头的 URI&#xff0c;表示配置的是支持 Websocket 协议的目标地址。 这种方式适用于需要与客户端建立长连接、实现双向通信的场景&#xff0c;比如实时消息推送、即时聊天等。 使用 Websocket 配置方式可以让 Spring Cloud Gateway 能够…

day14-SpringBoot 原理篇

一、配置优先级 SpringBoot 中支持三种格式的配置文件&#xff1a; 注意事项 虽然 springboot 支持多种格式配置文件&#xff0c;但是在项目开发时&#xff0c;推荐统一使用一种格式的配置 &#xff08;yml 是主流&#xff09;。 配置文件优先级排名&#xff08;从高到低&…

R语言实现多要素偏相关分析

偏相关分析是指当两个变量同时与第三个变量相关时&#xff0c;将第三个变量的影响剔除&#xff0c;只分析另外两个变量之间相关程度的过程&#xff0c;判定指标是相关系数的R值。 在GIS中&#xff0c;偏相关分析也十分常见&#xff0c;我们经常需要分析某一个指数与相关环境参…

clickhouse突然启动不起来问题排查

场景&#xff1a; 在实现postgreql数据迁移到clickhouse中&#xff0c;想使用MaterializedPostgreSQL的功能实现&#xff0c;但是中途clickhouse突然挂了&#xff0c;就再启动不了了。 现象&#xff1a; systemctl start clcikhouse-server启动报错 [rootlocalhost clickhous…

理清大数据技术与架构

大数据并不是一个系统软件&#xff0c;更不是一个单一的软件&#xff0c;它实际上是一种技术体系、一种数据处理方法&#xff0c;甚至可以说是一个服务平台。在这个技术体系中&#xff0c;涵盖了许多不同的部件&#xff0c;比如Hadoop服务平台。这一服务平台可以根据具体情况自…