一. 简介

JSON,全称为JavaScript Object Notation(JavaScript对象标记),它通过对象和数组的组合来表示数据,是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

二. json语法

1. json语法规则

在js语言中,一切都是对象。因此,任何支持的类型都可以通过json来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型

(1)对象表示为键值对

(2)数据由逗号分隔

(3)花括号保存对象

(4)方括号保存数组

2 json键值对

JSON 键值对是用来保存 JS 对象的一种方式,和 JS 对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 "" 包裹,使用冒号 : 分隔,然后紧接着值

注意:(1)python中的key:value必须都是双引号(不能用单引号)

     (2) 末尾不能写逗号

     (3)整个文件内容只能是被一个大括号{}或中括号[]包裹

3.对象和数组

(1)对象:对象在 JS 中是使用花括号包裹 {} 起来的内容,数据结构为 {key1:value1, key2:value2, ...} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。

  (2)数组:数组在 JS 中是方括号 [] 包裹起来的内容,数据结构为 ["java", "javascript", "vb", ...] 的索引结构。在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。

三. json常用操作

loads,dumps;load,dump

1. 字符串和dict,list转换(loads,dumps)

(1)字符串向dict,list转换

str_list = '[{"name":"张三", "age":"20"}, {"name":"李四", "age":18}]'
str_dict = '{"name":"张三", "age":"20"}'
list_data = json.loads(str_list)
dict_data = json.loads(str_dict)
print(type(list_data))
print(list_data)
print(type(dict_data))
print(dict_data)

打印结果

<class 'list'>
[{'name': '张三', 'age': '20'}, {'name': '李四', 'age': 18}]
<class 'dict'>
{'name': '张三', 'age': '20'}

(2)dict,lis向字符串转换  

data_list = [{"name":"张三", "age":"20"}, {"name":"李四", "age":18}]
data_dict = {"name":"张三", "age":"20"}
list_str = json.dumps(data_list)
dict_str = json.dumps(data_dict)
print(type(list_str))
print(list_str)
print(type(dict_str))
print(dict_str)

 打印结果

<class 'str'>
[{"name": "\u5f20\u4e09", "age": "20"}, {"name": "\u674e\u56db", "age": 18}]
<class 'str'>
{"name": "\u5f20\u4e09", "age": "20"}

 

2. dict,list和文件对象(只包含一个json的文件)间的转换(load,dump)

(1)dict、list写入文件

list2 = [{"name": "张三", "age": 20}, {"name": "李四", "age": 18}]
with open('new.json', 'w') as f:
json.dump(list2, f)

结果能得到new.json文件(其内容为list2中的内容)

(2)读取文件=====>list、dict

with open('new.json', 'r') as f:
result = json.load(f)
print(result)

 打印结果如下:

[{'name': '张三', 'age': 20}, {'name': '李四', 'age': 18}]

3. json中的数据转换成csv文件(比较常用的是表格形式,便于数据分析) 

import json
import csv # 需求 json 中的数据 转换 成 csv文件 # 1.分别 读 , 创建文件
json_fp = open('02new.json', 'r')
csv_fp = open('03csv.csv', 'w')
with open('02new.json', 'r') as f:
# 读取出json内容,并转换为dict格式
data_list = json.load(f)
# 提取出表头
sheet_title = data_list[0].keys() # 提取出表内容
sheet_data = []
for data in data_list:
sheet_data.append(data.values())
# csv 写入器,初始化写入对象
writer = csv.writer(csv_fp)
# 写入表头
writer.writerow(sheet_title)
# 写入内容
writer.writerows(sheet_data)
# 6. 关闭两个文件
json_fp.close()
csv_fp.close()

结果得到03csv.csv文件,内容如下:

四. 案例------爬取http://www.allitebooks.org/   ,获取书名、作者、简介

最新文章

  1. Sql Server系列:运算符和表达式
  2. QCustomplot使用分享(七) 层(完结)
  3. MySQL增加列,修改列名、列属性,删除列
  4. Difference between LET and LET* in Common LISP
  5. 使用 IntelliJ IDEA 2016和Maven创建Java Web项目的详细步骤及相关问题解决办法
  6. linux压缩和解压命令总结
  7. poj 3259 Wormholes spfa算法
  8. bash 的漏洞,你们中招了吗?
  9. 《MFC游戏开发》笔记五 定时器和简单动画
  10. vs2008调试提示:未安装Silverlight托管调试包
  11. jQuery中在当前页面弹出一个新的界面
  12. 第三方 XListview 上拉加载、下拉刷新、分页加载和Gson解析
  13. Jasper之table报表
  14. JAVA核心技术I---JAVA基础知识(package和import)
  15. Redis-Desktop-Manager的下载与使用
  16. C# Linq to Entity Lamda方式分组并求和求平均值
  17. SQL Server Instance无法启动了, 因为TempDB所在的分区没有了, 怎么办?
  18. 【译】Linux概念架构的理解
  19. k8s v1.5.8 单节点搭建
  20. 采用文件方式安装Python第三方库

热门文章

  1. 谷歌chrome多个相同用户登陆同一个机器多开配置
  2. shell脚本 PHP+swoole的安装
  3. Matlab画colormap的一种色彩搭配方法
  4. jQuery淡入淡出效果
  5. Linux 系统分区方案 详细教程
  6. MacOS修复TNT和谐软件运行崩溃、闪退问题
  7. webpack 之开发环境优化 source-map
  8. 基于ABP开发框架的技术点分析和项目快速开发实现
  9. 数据库学习笔记 - MySQL基础知识
  10. python有关于图像的深度和通道