1          json简介

1.1         json是什么?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。

“在JSON出现之前,大家一直用XML来传递数据。因为XML是一种纯文本格式,所以它适合在网络上交换数据。XML本身不算复杂,但是,加上DTD、XSD、XPath、XSLT等一大堆复杂的规范以后,任何正常的软件开发人员碰到XML都会感觉头大了,最后大家发现,即使你努力钻研几个月,也未必搞得清楚XML的规范。

终于,在2002年的一天,道格拉斯·克罗克福特(Douglas Crockford)同学为了拯救深陷水深火热同时又被某几个巨型软件企业长期愚弄的软件工程师,发明了JSON这种超轻量级的数据交换格式。”

1.2         json特点

json格式适合阅读,容易理解,对计算机来说处理起来也很方便。json文本格式与C家族语言(C,C++,C#,Java,JavaScript,Perl,Python以及许多其他语言)的传统变量非常的相似,它的文本语言建立在以下两种结构上:

l  “名称/值”对的无序集合(以下简称键值对),在其他编程语言中,这种“名称/值”对可能称为对象、记录、结构、字典、哈希表、键表或者关联数组。

l  “值”的有序列表,对应其他语言中的数组,向量,链表或者序列。

上面这些基本的数据结构,几乎所有现代语言都能支持其中一种或多种,因此json作为一种数据交换格式就理所当然了。

1.3         json格式

名称(key/name):用双引号包含的字符串。

值(value)可以是双引号包含的字符串,真假值(true,false),空(null),对象或者数组,也就是说可以是嵌套结构。

对象(object)是无序键值对的集合:以左花括弧“{”开始,右花括弧“}”结束,每个对名称(name)与值(value)之间使用“:”分隔,键值对之间使用逗号“,”分隔。

数组(array)是有序值的序列:array以左方括弧“[”开始,右方括弧“]”结束,值与值之间使用逗号“,”分隔。

字符串(string)是使用双引号包含的数个(可以是0个)连续unicode字符,使用反斜杠“\”作为转义字符,类似C语言和Java中的字符串。

整数(number)除了不支持8进制和16进制,其他特性与C语言和Java语言整数相同。

2          Python3 JSON使用

Python内置可以处理JSON数据的包:

 import json

在Python中,JSON数据表示为一个字符串

 json_data = '{"name": "Bob", "languages": ["Python", "Java"]}'

json数据还可以从文件中读取,Python中的常用JSON方法如下:

函数

描述

json.dumps()

将Python对象编码成JSON字符串

json.loads()

将已编码的JSON字符串解码为Python对象

2.1         在Python中解析JSON

使用Python JSON包中的json.loads()函数可以轻松解析JSON字符串和JSON文件为Python对象。

例1:在Python中将JSON解析为dict

 import json

 person = '{"name": "Bob", "languages": ["English", "Fench"]}'
person_dict = json.loads(person) # Output: {'name': 'Bob', 'languages': ['English', 'Fench']}
print( person_dict) # Output: ['English', 'French']
print(person_dict['languages'])
 

例2:在Python中读取JSON文件并解析person是JSON字符串,person_dict是Python dict对象。

假设你的如下JSON数据存放在名字为“person.json”的文件中

 {"name": "Bob",
"languages": ["English", "Fench"]
}

可以使用如下方式解析该文件中的JSON数据:

 import json

 with open('path_to_file/person.json') as f:
data = json.load(f) # Output: {'name': 'Bob', 'languages': ['English', 'Fench']}
print(data)

代码中使用open()函数打开文件,使用json.load()函数解析JSON数据,将解析得到的数据放在data变量。

JSON字符串在解析到Python对象时的默认数据对应见下表

JSON

Python

object

dict

array

list

string

unicode

number (int)

int, long

number (real)

float

true

True

false

False

null

None

关于json.load()函数的详细使用方法见https://docs.Python.org/3.7/library/json.html

关于在Python中对文件的操作请参考https://www.programiz.com/Python-programming/file-operation

2.2         将Python数据打包成json字符串

使用Python JSON包中的json.dumps()函数可以将Python数据打包成JSON字符串。

例3:将dict转成JSON

 import json

 person_dict = {'name': 'Bob',
'age': 12,
'children': None
} person_json = json.dumps(person_dict) # Output: {"name": "Bob", "age": 12, "children": null}
print(person_json)

例4:将JSON数据写入文件

上面的程序中,打开一个文件名为“person.txt”的文件,打开模式为写入“w”,如果文件不存在,就会自动新建一个。接着使用json.dump()函数将person_dict数据打包成JSON字符串,写入到打开的文件中。

程序运行后会在该代码所在目录生成person.txt文件,文件内容应该如下;

 {"name": "Bob", "languages": ["English", "Fench"], "married": true, "age": 32}

2.3         格式化输出JSON数据

为了分析JSON数据,我们可能需要以阅读友好的格式输出JSON数据。通过向json.dumps()函数传递格式控制参数indent和sort_keys可以实现该功能。

例5:格式化打印json数据

 import json

 person_string = '{"name": "Bob", "languages": "English", "numbers": [2, 1.6, null]}'

 # Getting dictionary
person_dict = json.loads(person_string) # Pretty Printing JSON string back
print(json.dumps(person_dict, indent = 4, sort_keys=True))

上述参数意思为:缩进4个空格,对键值对进行升序排序,运行后输出结果如下:

 {
"languages": "English",
"name": "Bob",
"numbers": [
2,
1.6,
null
]
}

可以看到,输出结果多了换行和缩进,看起来整洁多了。

Python对象在打包为JSON字符串过程中默认数据对应见下表

Python

JSON

dict

object

list, tuple

array

str

string

int, float, int- & float-derived Enums

number

True

true

False

false

None

null

3          json数据样例

 {
"firstName": "John",
"lastName": "Smith",
"isAlive": true,
"age": 27,
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021-3100"
}, "phoneNumbers": [
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "office",
"number": "646 555-4567"
},
{
"type": "mobile",
"number": "123 456-7890"
}
],
"children": [],
"spouse": null
}

4          参考链接

https://www.json.org

https://docs.python.org/3.7/library/json.html

https://en.wikipedia.org/wiki/JSON

https://www.liaoxuefeng.com/wiki/1022910821149312/1023021554858080

https://developers.squarespace.com/what-is-json

Python JSON的简单使用的更多相关文章

  1. python之simplejson,Python版的简单、 快速、 可扩展 JSON 编码器/解码器

    python之simplejson,Python版的简单. 快速. 可扩展 JSON 编码器/解码器 simplejson Python版的简单. 快速. 可扩展 JSON 编码器/解码器 编码基本的 ...

  2. Python中json的简单读写操作

    Python中json的简单读写操作 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的 ...

  3. python JSON处理

    概念 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等. 反序列化:就是从存储区域(JSON,XML)读取反序列化对象的 ...

  4. python json基础学习01

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' import json #全称(javascript object  ...

  5. Python: json模块实例详解

    ref:https://www.jianshu.com/p/e29611244810 https://www.cnblogs.com/qq78292959/p/3467937.html https:/ ...

  6. Python -- Json 数据编码及解析

    Python  --  Json  数据编码及解析 Json 简单介绍 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本 ...

  7. 12 python json&pickle&shelve模块

      1.什么叫序列化 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes(字节) 2.用于序列化的两个模块,json和pickle ...

  8. python json序列化与反序列化操作

    python json序列化与反序列化操作 # dumps() dict-->str 序列化 # loads() str---dict 反序列化 result1 = json.dumps({'a ...

  9. Python+requests 发送简单请求--》获取响应状态--》获取请求响应数据

    Python+requests 发送简单请求-->获取响应状态-->获取请求响应数据 1.环境:安装了Python和vscode编译器(Python自带的编译器也ok).fiddler抓包 ...

随机推荐

  1. 查询、下载GWAS目录数据的R包(gwasrapidd)

    目前GWAS方向发了很多文献,但是并没有一个很完善的R包对这些文献的数据进行汇总. 接下来推荐的这个是最新发表的GWAS数据汇总R包​.看了一下功能齐全,但是数据不是收录的很齐全​. 下面具体讲一下. ...

  2. LinkedBlockingQueue与ArrayBlockingQueue

    阻塞队列与普通的队列(LinkedList/ArrayList)相比,支持在向队列中添加元素时,队列的长度已满阻塞当前添加线程,直到队列未满或者等待超时:从队列中获取元素时,队列中元素为空 ,会将获取 ...

  3. BDC里的 BDC_OKCODE

      BDC OKCODE其实都是function code,对于处理一些BDC问题 非常有用,   列出一些知道的 OKCODE BDC_OKCODE 功能描述 =/00.  Enter = /8   ...

  4. function的json对象转换字符串与字符串转换为对象的方法

    // json对象转换成字符串var str = JSON.stringify(json, function(key, val) { if (typeof val === 'function') { ...

  5. K8S+GitLab+.net core-自动化分布式部署-2

    K8S+GitLab-自动化分布式部署ASP.NET Core(二) ASP.NET Core DevOps K8S+GitLab-自动化分布式部署ASP.NET Core(二) ASP.NET Co ...

  6. mysql执行计划详解,

    一.语法 explain SQL语句 例如: explain ; 二.explain输出解释 +----+-------------+-------+-------+----------------- ...

  7. SecureCRT 使用密钥登录 Ubuntu

    记录 SecureCRT 通过 SSH 使用密钥登录 Ubuntu. 具体步骤如下: 1. 使用 SecureCRT 生成密钥对: 工具 -> 创建公钥 -> 密钥类型 RSA -> ...

  8. [转]综述论文翻译:A Review on Deep Learning Techniques Applied to Semantic Segmentation

    近期主要在学习语义分割相关方法,计划将arXiv上的这篇综述好好翻译下,目前已完成了一部分,但仅仅是尊重原文的直译,后续将继续完成剩余的部分,并对文中提及的多个方法给出自己的理解. _论文地址:htt ...

  9. springmvc的注解配置

    springmvc大大减少了对xml的配置,减少了配置量,以及可以在一个controller类中进行多个请求配置 一.springmvc配置 context:component-scan 开启包扫描, ...

  10. Java开发笔记(一百二十九)Swing的输入框

    Swing的输入框仍然分成两类:单行输入框和多行输入框,但与AWT的同类控件相比,它们在若干细节上有所调整.首先说单行输入框,AWT的单行输入框名叫TextField,平时输入什么字符它便显示什么字符 ...