一、JSON格式详解
所有 JSON 数据需要包裹在一个花括号中。
{ "sites": [ { "name":"maybe" , "url":"www.maybe.com" }, { "name":"google" , "url":"www.google.com" } ]}
Object(对象):键/值对("key":"value"
)的集合。集合使用花括号{ }
定义。多个键/值对之间使用逗号,
分隔,例如{"name":"pink","url":"unknown"}
。Array(数组):值的有序集合,使用方括号[ ]
定义,数组中每个值之间使用逗号 ,
进行分隔。 1. 基本语法
值可以是数字、字符串、布尔值、数组、对象、null;键必须是唯一的,不能重复;不可以使用八进制或十六进制表示数字。不支持注释可以嵌套2. 数据类型
number:JSON 中不区分整型和浮点型。此外,JSON 中不能使用八进制和十六进制表示数字,但可以使用 e 或 E 来表示 10 的指数。
{ "number_1" : 20, "number_2" : -21.5, "number_3" : 1.0E+1}
value:null 和 true/false
object:JSON 中,对象由花括号{ }
以及其中的若干键/值对组成,一个对象中可以包含零个或多个键/值对,每个键/值对之间需要使用逗号,
分隔.
{ "author": { "name": "C", "description": "C语言" }}
array:JSON 中,数组由方括号[ ]
和其中的若干值组成,值可以是 JSON 中支持的任意类型,每个值之间使用逗号,
进行分隔。
{ "course" : [ "JSON", "CSS", { "ok" : "well", "how" : "fine" }, [ 3.1, fasle ], null ]}
二、python
1. 数据文件(data.json)
{ "employee": { "name": "John Doe", "age": 35, "department": { "name": "Engineering", "location": "Building A" } }}
2.原生python解析
需要导入JSON包进行文件解析。
import json# 读取 JSON 数据with open('data/data.json', 'r') as f: json_data = f.read()# 解析 JSON 数据data = json.loads(json_data)print(type(data)) # dictfor key, value in data.items(): # 遍历第一层 print(f"Key: {key}, Value: {value}") # 如果值是字典,继续遍历第二层 if isinstance(value, dict): for sub_key, sub_value in value.items(): # 遍历第二层 print(f" Sub-key: {sub_key}, Sub-value: {sub_value}") # 如果第二层的值还是字典,进一步处理 if isinstance(sub_value, dict): for deep_key, deep_value in sub_value.items(): print(f" Deep-key: {deep_key}, Deep-value: {deep_value}")
3. pandas
需要导入pandas包进行文件解析。
import pandas as pdpath = 'data/data.json'# 1. 打开并读取 JSON 文件df = pd.read_json(path)print(type(df)) # DataFrame# 2. 按行解析 JSON 数据x = df.to_dict(orient='records')print(type(x)) # list ,其中每个元素是一个字典# 3. 按列解析 JSON 数据y = df.to_dict(orient='list')print(type(y)) # dict 类型,其中每个键的值是列表# 4. 扁平化嵌套的 JSON 数据x_normalized = pd.json_normalize(x)print(x_normalized)# 5. 将 DataFrame 转换为 JSON 格式json_data = df.to_json()print(json_data)# 6. 将 DataFrame 写入 JSON 文件df.to_json('output.json')