背景

json 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。

一般表现形式是一个无序的 键值对 的集合。

资料:

官方文档: https://docs.python.org/3/library/json.html#module-json

python操作json的其他方式:

编码(dump)

1. 将字符串转化为json串(dumps)

import json

a="\"foo\bar"
result=json.dumps(a)
print(result)
print(type(result))

执行结果:

"\"foo\bar"
<class 'str'>

2. 将列表转化为json串(dumps)

import json

a=['foo', {'bar': ('baz', None, 1.0, 2)}]
result=json.dumps(a)
print(result)
print(type(result))

执行结果:

["foo", {"bar": ["baz", null, 1.0, 2]}]
<class 'str'>

3. 将字典转化为json串(dumps)

import json

a={"c": 0, "b": 0, "a": 0}
result=json.dumps(a)
print(result)
print(type(result))

执行结果:

{"c": 0, "b": 0, "a": 0}
<class 'str'>

4. 转化字典为json串时,进行排序(dumps)

import json

a={"c": 0, "b": 0, "a": 0}
result=json.dumps(a, sort_keys=True)
print(result)

执行结果:

{"a": 0, "b": 0, "c": 0}

对照上一个例子,可以看到json串按照字典的key进行了排序。

5. 定义json串缩进(dumps)

import json

a=[1,2,3,{'': 5, '': 7}]
result=json.dumps(a, indent=4)
print(result)

执行结果:

[
1,
2,
3,
{
"": 7,
"": 5
}
]

可以看到json串输出时采用了定义的4个空格进行缩进。

6. 将产生的json串输出到文件流(dump)

import json

myfile=open('a.txt','w')

a=[1,2,3,{'': 5, '': 7}]
json.dump(a,myfile, indent=4) myfile.close()

执行之后,打开 a.txt 文件进行查看:

[
1,
2,
3,
{
"": 7,
"": 5
}
]

解码(load)

1. 将json串解码为列表(loads)

import json

json_str='["foo", {"bar":["baz", null, 1.0, 2]}]'
result=json.loads(json_str)
print(result)
print(type(result))

执行结果:

['foo', {'bar': ['baz', None, 1.0, 2]}]
<class 'list'>

可以看到,这里讲json串解码为一个list。

2. 将json串解码为字典(loads)

import json

json_str='{"a": 0, "b": 0, "c": 0}'
result=json.loads(json_str)
print(result)
print(type(result))

执行结果:

{'a': 0, 'c': 0, 'b': 0}
<class 'dict'>

3. 从文件流解码json串(load)

以上面dump生成的a.txt为例。

import json

myfile=open("a.txt",'r')

# json_str='{"a": 0, "b": 0, "c": 0}'
result=json.load(myfile)
print(result)
print(type(result)) myfile.close()

执行结果:

[1, 2, 3, {'': 7, '': 5}]
<class 'list'>

可以看到成功将a.txt的内容解码为list。

其他

1. dumps 和 dump 的区别

下面是两个函数的定义:

dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw)

dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw)

可以看到,dump比 dumps多了一个参数 fp。

dumps 会直接将生成的 json串 返回,也就是可以采取 json_str=dumps()的方式来获取结果。

但是 dump 没有返回值,它会将生成的 json串 输出到 fp 流中。

2. loads 和 load 的区别

下面是两个函数的定义:

load(fp, cls=None, object_hook=None, parse_float=None,parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

可以看到 load 的前两个参数是 fp 以及 cls,而 loads 的前两个参数是 s 和 encoding。

loads 会将 json串直接进行解码输出。

load 是从 fp 文件流中读取json串,然后进行解码输出。本质load函数定义的时候还是调用的 load函数。

3. 抓取请求,并解析json内容

这里采用的是python 的 requests 库进行抓取。

import json
import requests r=requests.get('http://baike.baidu.com/api/openapi/BaikeLemmaCardApi?scope=103&format=json&appid=379020&bk_key=%E9%93%B6%E9%AD%82&bk_length=600')
print(type(r.text)) json_str=r.text
result=json.loads(json_str)
print(result)
print(type(result)) if result['id']==26096:
print("success")
else:
print("fail")

执行结果如下:

<class 'str'>
{'imageWidth': 512, 'totalUrl': 'http://baike.baidu.com/view/26096.htm', 'card': [{'name': '中文名', 'format': ['银魂'], 'key': 'm21_bookname', 'value': ['银魂']}], 'key': '银魂', 'id': 26096, 'isSummaryPic': 'y', 'hasOther': 1, ……<class 'dict'>
success

这里首先采用request.get 抓取json网页,然后对 r.text 网页内容进行解析。如果网页内容 id 值为 26096的话,这里就打印success。

备注:当然,这里也可以直接使用 r.json()进行json解析。

Python 3 操作json 文件的更多相关文章

  1. linux 操作 json文件

    Linux 下 操作 json 文件神器 jq.  jq yum install jq -y 查看一个 file.json 文件 # jq . file.json JSON (JavaScript O ...

  2. python脚本解析json文件

    python脚本解析json文件 没写完.但是有效果.初次尝试,写的比较不简洁... 比较烦的地方在于: 1,中文编码: pSpecs.decode('raw_unicode_escape') 2,花 ...

  3. python中操作csv文件

    python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...

  4. python操作json文件获取内容

    写case时,将case 写到json文件比写到,写python一定要学会处理json 以下,是要处理的json 处理操作包括:打开json文件,获取json文件内容,关闭json文件,读取内容中的对 ...

  5. python操作json文件

    import json class OperationJson(object): def __init__(self,file_name=None): if file_name: self.file_ ...

  6. python中读取json文件报错,TypeError:the Json object must be str, bytes or bytearray,not ‘TextIOWrapper’

    利用python中的json读取json文件时,因为错误使用了相应的方法导致报错:TypeError:the Json object must be str, bytes or bytearray,n ...

  7. python脚本将json文件生成C语言结构体

    1.引言 以前用过python脚本根据excel生成相关C语言代码,其实本质就是文件的读写,主要是逻辑问题,这次尝试将json文件生成C语言的结构体. 2.代码 这是一个json文件,生成这个结构体的 ...

  8. Python实现读取json文件到excel表

    一.需求 1.'score.json' 文件内容: { "1":["小花",99,100,98.5], "2":["小王" ...

  9. 从接口自动化测试框架设计到开发(二)操作json文件、重构json工具类

    用例模板里的请求数据多,看起来很乱,所以可以通过访问另外一个文件的方式获取请求数据 把请求数据都放在一个json文件中 取出login的内容: import json fp = open('G:/un ...

随机推荐

  1. 【BZOJ 4103】 4103: [Thu Summer Camp 2015]异或运算 (可持久化Trie)

    4103: [Thu Summer Camp 2015]异或运算 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 474  Solved: 258 De ...

  2. python3-开发进阶Flask的基础(5)

    内容概要: SQLAlchemy flsak-sqlalchemy flask-script flask-migrate Flask的目录结构 一.SQLAlchemy 1.概述 SQLAlchemy ...

  3. [转载]C++内存管理

    [导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不 ...

  4. 【8.26校内测试】【重构树求直径】【BFS模拟】【线段树维护DP】

    题目性质比较显然,相同颜色联通块可以合并成一个点,重新建树后,发现相邻两个点的颜色一定是不一样的. 然后发现,对于一条链来说,每次把一个点反色,实际上使点数少了2个.如下图 而如果一条链上面有分支,也 ...

  5. CDOJ 1294 天行廖的游戏 dp 容斥

    天行廖的游戏 题目连接: http://acm.uestc.edu.cn/#/problem/show/1294 Description 天行健,君子以自强不息.地势坤,廖爷以厚德载物 一日在喵哈哈村 ...

  6. Python 实现简单的感知机算法

    感知机 随机生成一些点和一条原始直线,然后用感知机算法来生成一条直线进行分类,比较差别 导入包并设定画图尺寸 import numpy as np import matplotlib.pyplot a ...

  7. VMware中网络设置之host-only

    有了前面一篇的NAT的网络设置,本文就显得非常简单了.同样图文结合的步骤: 1.设置host-only模式. 2.设置linux虚拟机的静态IP.进入linux系统,点击主菜单---系统设置---网络 ...

  8. Ubuntu14.04和Tiny6410挂载NFS服务!

    我是以root身份登录Ubuntu的: 在Ubuntu上执行   #apt-get install nfs-kernel-server    //安装NFS服务 在Ubuntu上执行   #mkdir ...

  9. Fast-settling synchronous-PWM-DAC filter has almost no ripple

    An inexpensive way to implement high-resolution digital-to-analog conversion is to combine microcont ...

  10. HDU 1159 &amp;&amp; POJ 1458

    最长公共子序列.状态转移方程见代码. #include <iostream> #include <cstdio> #include <cstring> using ...