在Python中有效使用JSON的4个技巧

Python has two data types that, together, form the perfect tool for working with JSON: dictionaries and lists. Let's explore how to:

Python有两种数据类型,它们一起构成了使用JSON的理想工具: 字典列表 。 让我们探索如何:

  • load and write JSON

    加载和编写JSON
  • Pretty-print and validate JSON on the command line

    在命令行上漂亮打印并验证JSON
  • Do advanced queries on JSON docs by using JMESPath

    使用JMESPath对JSON文档进行高级查询

1.解码JSON (1. Decoding JSON)

Python ships with a powerful and elegant JSON library. It can be imported with:

Python附带了功能强大且优雅的JSON库 。 它可以通过以下方式导入:

import json

Decoding a string of JSON is as simple as json.loads(…) (short for load string).

解码JSON字符串就像json.loads(…) (加载字符串的缩写json.loads(…)一样简单。

It converts:

它转换为:

  • objects to dictionaries

    反对字典
  • arrays to lists,

    数组到列表,
  • booleans, integers, floats, and strings are recognized for what they are and will be converted into the correct types in Python

    布尔值,整数,浮点数和字符串可以识别其含义,并将在Python中转换为正确的类型
  • Any null will be converted into Python’s None type

    任何null都将转换为Python的None类型

Here’s an example of json.loads in action:

这是一个实际使用json.loads的示例:

>>> import json
>>> jsonstring = '{"name": "erik", "age": 38, "married": true}'
>>> json.loads(jsonstring)
{'name': 'erik', 'age': 38, 'married': True}

2.编码JSON (2. Encoding JSON)

The other way around is just as easy. Use json.dumps(…) (short for ‘dump to string) to convert a Python object consisting of dictionaries, lists, and other native types into a string:

反之亦然。 使用json.dumps(…) (“转储为字符串”的缩写)将包含字典,列表和其他本机类型的Python对象转换为字符串:

>>> myjson = {'name': 'erik', 'age': 38, 'married': True}
>>> json.dumps(myjson)
'{"name": "erik", "age": 38, "married": true}'

This is the exact same document, converted back to a string! If you want to make your JSON document more readable for humans, use the indent option:

这是完全相同的文档,转换回字符串! 如果要使JSON文档更易被人类阅读,请使用indent选项:

>>> print(json.dumps(myjson, indent=2))
{
"name": "erik",
"age": 38,
"married": true
}

3.命令行用法 (3. Command-line usage)

The JSON library can also be used from the command-line, to validate and pretty-print your JSON:

JSON库也可以从命令行使用,以验证 JSON并进行漂亮打印

$ echo "{ \"name\": \"Monty\", \"age\": 45 }" | \
python3 -m json.tool
{
"name": "Monty",
"age": 45
}

As a side note: if you’re on a Mac or Linux and get the chance to install it, look into the jq command-line tool too. It’s easy to remember, colorizes your output, and has loads of extra features as explained in my article on becoming a command-line ninja.

附带说明:如果您使用的是Mac或Linux,并且有机会安装它,请也查看jq命令行工具。 正如我在成为命令行忍者中的文章中所解释的那样,它很容易记住,为您的输出着色,并具有许多额外的功能。

jq will pretty-print your JSON by default
jq will pretty-print your JSON by default
jq默认会漂亮地打印您的JSON

4.使用JMESPath搜索JSON (4. Searching through JSON with JMESPath)

JMESPath is a query language for JSON
Screenshot by author截图

JMESPath is a query language for JSON. It allows you to easily obtain the data you need from a JSON document. If you ever worked with JSON before, you probably know that it’s easy to get a nested value.

JMESPath是JSON的查询语言。 它使您可以轻松地从JSON文档中获取所需的数据。 如果您曾经使用过JSON,那么您可能知道获取嵌套值很容易。

For example: doc["person"]["age"] will get you the nested value for age in a document that looks like this:

例如: doc["person"]["age"]将为您提供文档的年龄嵌套值,如下所示:

{
"persons": {
"name": "erik",
"age": "38"
}
}

But what if you want to extract all the age-fields from an array of persons, in a document like this:

但是,如果您想从一系列人员中提取所有年龄段,在这样的文档中怎么办:

{
"persons": [
{ "name": "erik", "age": 38 },
{ "name": "john", "age": 45 },
{ "name": "rob", "age": 14 }
]
}

We could write a simple loop and loop over all the persons. Easy peasy. But loops are slow and introduce complexity to your code. This is where JMESPath comes in!

我们可以编写一个简单的循环,遍历所有人员。 十分简单。 但是循环很慢,会给您的代码带来复杂性。 这就是JMESPath进来的地方!

This JMESPath expression will get the job done:

这个JMESPath表达式将完成工作:

persons[*].age

It will return an array with all the ages: [38, 45, 14].

它将返回一个所有年龄的数组: [38, 45, 14]

Say you want to filter the list, and only get the ages for people named ‘erik’. You can do so with a filter:

假设您要过滤列表,仅获取名为“ erik”的人的年龄。 您可以使用过滤器执行此操作:

persons[?name=='erik'].age

See how natural and quick this is?

看看这有多自然和快速?

JMESPath is not part of the Python standard library, meaning you’ll need to install it with pip or pipenv. For example, when using pip in in virtual environment:

JMESPath不是Python标准库的一部分,这意味着您需要使用pippipenv安装它。 例如, 在虚拟环境中 使用 pip时:

$ pip3 install jmespath
$ python3
Python 3.8.2 (default, Jul 16 2020, 14:00:26)
>>> import jmespath
>>> j = { "people": [{ "name": "erik", "age": 38 }] }
>>> jmespath.search("people[*].age", j)
[38]
>>>

You’re now ready to start experimenting! Make sure to try the interactive tutorial and view the examples on the JMESPath site!

您现在就可以开始尝试了! 确保尝试交互式教程并在JMESPath站点上查看示例 !

If you have more JSON tips or tricks, please share them in the comments!Follow me on Twitter to get my latest articles first and make sure to visit my Python 3 Guide.

如果您还有其他JSON技巧或窍门,请在评论中分享! 在Twitter上 关注我 ,首先获取我的最新文章,并确保访问我的 Python 3指南

翻译自: https://towardsdatascience.com/4-tricks-to-effectively-use-json-in-python-4ca18c3f91d0

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

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

相关文章

Vlan中Trunk接口配置

Vlan中Trunk接口配置 参考文献:HCNA网络技术实验指南 模拟器:eNSP 实验环境: 实验目的:掌握Trunk端口配置 掌握Trunk端口允许所有Vlan配置方法 掌握Trunk端口允许特定Vlan配置方法 实验拓扑: 实验IP地址 :…

django中的admin组件

Admin简介: Admin:是django的后台 管理的wed版本 我们现在models.py文件里面建几张表: class Author(models.Model):nid models.AutoField(primary_keyTrue)namemodels.CharField( max_length32)agemodels.IntegerField()# 与AuthorDetail建立一对一的关…

虚拟主机创建虚拟lan_创建虚拟背景应用

虚拟主机创建虚拟lanThis is the Part 2 of the MediaPipe Series I am writing.这是我正在编写的MediaPipe系列的第2部分。 Previously, we saw how to get started with MediaPipe and use it with your own tflite model. If you haven’t read it yet, check it out here.…

.net程序员安全注意代码及服务器配置

概述 本人.net架构师,软件行业为金融资讯以及股票交易类的软件产品设计开发。由于长时间被黑客攻击以及骚扰。从事高量客户访问的服务器解决架构设计以及程序员编写指导工作。特此总结一些.net程序员在代码编写安全以及服务器设置安全常用到的知识。希望能给对大家…

接口测试框架2

现在市面上做接口测试的工具很多,比如Postman,soapUI, JMeter, Python unittest等等,各种不同的测试工具拥有不同的特色。但市面上的接口测试工具都存在一个问题就是无法完全吻合的去适用没一个项目,比如数据的处理,加…

python 传不定量参数_Python中的定量金融

python 传不定量参数The first quantitative class for vanilla finance and quantitative finance majors alike has to do with the time value of money. Essentially, it’s a semester-long course driving notions like $100 today is worth more than $100 a year from …

雷军宣布红米 Redmi 品牌独立,这对小米意味着什么?

雷锋网消息,1 月 3 日,小米公司宣布,将在 1 月 10 日召开全新独立品牌红米 Redmi 发布会。从小米公布的海报来看,Redmi 品牌标识出现的倒影中,有 4800 的字样,这很容易让人联想起此前小米总裁林斌所宣布的 …

JAVA的rotate怎么用,java如何利用rotate旋转图片_如何在Java中旋转图形

I have drawn some Graphics in a JPanel, like circles, rectangles, etc.But I want to draw some Graphics rotated a specific degree amount, like a rotated ellipse. What should I do?解决方案If you are using plain Graphics, cast to Graphics2D first:Graphics2D …

贝叶斯 朴素贝叶斯_手动执行贝叶斯分析

贝叶斯 朴素贝叶斯介绍 (Introduction) Bayesian analysis offers the possibility to get more insights from your data compared to the pure frequentist approach. In this post, I will walk you through a real life example of how a Bayesian analysis can be perform…

西工大java实验报告给,西工大数字集成电路实验 实验课6 加法器的设计

西工大数字集成电路实验练习六 加法器的设计一、使用与非门(NAND)、或非门(NOR)、非门(INV)等布尔逻辑器件实现下面的设计。1、仿照下图的全加器,实现一个N位的减法器。要求仿照图1画出N位减法器的结构。ABABABAB0123图1 四位逐位进位加法器的结构2、根据自己构造的…

DS二叉树--二叉树之数组存储

二叉树可以采用数组的方法进行存储,把数组中的数据依次自上而下,自左至右存储到二叉树结点中,一般二叉树与完全二叉树对比,比完全二叉树缺少的结点就在数组中用0来表示。,如下图所示 从上图可以看出,右边的是一颗普通的…

VS IIS Express 支持局域网访问

使用Visual Studio开发Web网页的时候有这样的情况:想要在调试模式下让局域网的其他设备进行访问,以便进行测试。虽然可以部署到服务器中,但是却无法进行调试,就算是注入进程进行调试也是无法达到自己的需求;所以只能在…

构建图像金字塔_我们如何通过转移学习构建易于使用的图像分割工具

构建图像金字塔Authors: Jenny Huang, Ian Hunt-Isaak, William Palmer作者: 黄珍妮 , 伊恩亨特伊萨克 , 威廉帕尔默 GitHub RepoGitHub回购 介绍 (Introduction) Training an image segmentation model on new images can be daunting, es…

PHP mongodb运用,MongoDB在PHP下的应用学习笔记

1、连接mongodb默认端口是:27017,因此我们连接mongodb:$mongodb new Mongo(localhost) 或者指定IP与端口 $mongodb new Mongo(192.168.127.1:27017) 端口可改变若mongodb开启认证,即--auth,则连接为: $mongodb new …

SpringBoot项目打war包部署Tomcat教程

一、简介 正常来说SpringBoot项目就直接用jar包来启动&#xff0c;使用它内部的tomcat实现微服务&#xff0c;但有些时候可能有部署到外部tomcat的需求&#xff0c;本教程就讲解一下如何操作 二、修改pom.xml 将要部署的module的pom.xml文件<packaging>节点设置为war <…

关于如何使用xposed来hook微信软件

安卓端 难点有两个 收款码的生成和到帐监听需要源码加 2442982910转载于:https://www.cnblogs.com/ganchuanpu/p/10220705.html

GitHub动作简介

GitHub Actions can be a little confusing if you’re new to DevOps and the CI/CD world, so in this article, we’re going to explore some features and see what we can do using the tool.如果您是DevOps和CI / CD领域的新手&#xff0c;那么GitHub Actions可能会使您…

java returnaddress,JVM之数据类型

《Java虚拟机规范》阅读笔记-数据类型1.概述Java虚拟机的数据类型可分为两大类&#xff1a;原始类型(Primitive Types&#xff0c;也称为基本类型)和引用类型(Reference Types)。Java虚拟机用不同的字节码指令来操作不同的数据类型[1] 。2.原始类型原始类型是最基本的元素&…

C# matlab

编译环境&#xff1a;Microsoft Visual Studio 2008版本 9.0.21022.8 RTMMicrosoft .NET Framework版本 3.5已安装的版本: ProfessionalMicrosoft Visual Basic 2008 91986-031-5000002-60050Microsoft Visual Basic 2008Microsoft Visual C# 2008 91986-031-5000002-60050…

基于容器制作镜像

一。镜像基础 一。基于容器制作镜像 1. 查看并关联运行的容器 [ghlocalhost ~]$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4da438fc9a8e busybox …