如何对JSON数据进行操作:从解析到实战的全面指南
JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,以其简洁、易读和易于解析的特性,在现代软件开发中得到了广泛应用,从Web API的数据传输到配置文件存储,从移动应用后端到大数据处理,JSON无处不在,JSON数据的操作方法,是每一位开发者的必备技能,本文将详细介绍如何对JSON数据进行操作,包括解析、构建、查询、修改、序列化及实战应用。
JSON数据基础:认识与理解
在操作JSON之前,首先要明确JSON的数据结构,JSON支持两种基本结构:
- 对象(Object):无序的键值对集合,以花括号 包裹,键(key)必须是字符串,值(value)可以是字符串、数字、布尔值、null、数组或另一个对象。
{"name": "张三", "age": 30, "isStudent": false}。 - 数组(Array):有序的值列表,以方括号
[]包裹,值可以是字符串、数字、布尔值、null、数组或对象。[1, "apple", {"color": "red"}]。
理解了这两种基本结构,我们就能更好地对JSON数据进行操作。
解析JSON:将字符串转换为对象/数组
JSON数据通常以字符串的形式在网络中传输或存储在文件中,要对其进行操作,首先需要将其解析为编程语言中对应的数据结构(如JavaScript中的对象和数组,Python中的字典和列表)。
JavaScript 中解析JSON
JavaScript 原生提供了 JSON.parse() 方法用于将JSON字符串解析为JavaScript对象或数组。
const jsonString = '{"name": "李四", "age": 25, "hobbies": ["reading", "music"]}';
const jsonObj = JSON.parse(jsonString);
console.log(jsonObj.name); // 输出: 李四
console.log(jsonObj.hobbies[0]); // 输出: reading
注意事项:
- JSON字符串中的键名必须使用双引号 ,单引号会导致解析错误。
- 如果JSON字符串格式不正确,
JSON.parse()会抛出SyntaxError。
Python 中解析JSON
Python 标准库中的 json 模块提供了 loads() 函数(load string)用于将JSON字符串解析为Python字典或列表。
import json
json_string = '{"name": "王五", "age": 28, "skills": ["Python", "JavaScript"]}'
json_obj = json.loads(json_string)
print(json_obj["name"]) # 输出: 王五
print(json_obj["skills"][1]) # 输出: JavaScript
注意事项:
- Python中解析后的键名如果是合法的标识符,可以直接通过属性访问(如果使用了
json.loads()的object_hook或object_pairs_hook,但通常直接使用字典键访问)。 - 同样,JSON字符串格式错误会引发
json.JSONDecodeError。
构建JSON:将对象/数组转换为字符串
当我们需要将程序中的数据以JSON格式发送给其他系统或保存到文件时,需要将对象或数组序列化为JSON字符串。
JavaScript 中构建JSON
JavaScript 原生提供了 JSON.stringify() 方法用于将JavaScript对象或数组转换为JSON字符串。
const jsObj = { name: "赵六", age: 32, city: "北京" };
const jsonString = JSON.stringify(jsObj);
console.log(jsonString); // 输出: {"name":"赵六","age":32,"city":"北京"}
// 数组示例
const jsArray = [1, 2, {"a": 3}];
const jsonArrayString = JSON.stringify(jsArray);
console.log(jsonArrayString); // 输出: [1,2,{"a":3}]
高级用法:
-
JSON.stringify()还可以接受两个可选参数:一个 replacer 函数(用于过滤或转换值)和一个 space 参数(用于格式化输出)。const user = { name: "钱七", password: "123456", age: 40 }; // 只输出name和age const filteredString = JSON.stringify(user, ["name", "age"]); console.log(filteredString); // 输出: {"name":"钱七","age":40} // 格式化输出 const formattedString = JSON.stringify(user, null, 2); console.log(formattedString); /* 输出: { "name": "钱七", "password": "123456", "age": 40 } */
Python 中构建JSON
Python 的 json 模块提供了 dumps() 函数(dump string)用于将Python字典或列表转换为JSON字符串。
import json
py_dict = {"name": "孙八", "age": 35, "hobbies": ["traveling", "coding"]}
json_string = json.dumps(py_dict)
print(json_string) # 输出: {"name": "孙八", "age": 35, "hobbies": ["traveling", "coding"]}
高级用法:
json.dumps()也支持ensure_ascii(默认True,非ASCII字符会被转义)、indent(格式化输出)、sort_keys(对键排序)等参数。person = {"name": "周九", "age": 45, "city": "上海"} # 格式化输出,非ASCII字符正常显示,键排序 formatted_json = json.dumps(person, ensure_ascii=False, indent=4, sort_keys=True) print(formatted_json) /* 输出: { "age": 45, "city": "上海", "name": "周九" } */
查询与修改JSON数据
解析JSON后,我们就可以像操作普通对象或数组一样对其进行查询和修改。
查询JSON数据
-
JavaScript:
const data = { "user": { "id": 101, "profile": { "name": "吴十", "email": "wushi@example.com" }, "orders": [ {"id": "A001", "amount": 100}, {"id": "A002", "amount": 200} ] } }; // 查询用户名 const userName = data.user.profile.name; console.log(userName); // 输出: 吴十 // 查询第一个订单的金额 const firstOrderAmount = data.user.orders[0].amount; console.log(firstOrderAmount); // 输出: 100 -
Python:
import json data_str = """ { "user": { "id": 102, "profile": { "name": "郑十一", "email": "zhengshiyi@example.com" }, "orders": [ {"id": "B001", "amount": 150}, {"id": "B002", "amount": 250} ] } } """ data = json.loads(data_str) # 查询用户邮箱 user_email = data["user"]["profile"]["email"] print(user_email) # 输出: zhengshiyi@example.com # 查询第二个订单ID second_order_id = data["user"]["orders"][1]["id"] print(second_order_id) # 输出: B002
修改JSON数据
-
JavaScript:
const data = { name: "陈十二", age: 28, city: "广州" }; // 修改年龄 data.age = 29; console.log(data.age); // 输出: 29 // 添加新属性 data.gender = "male"; console.log(data); // 输出: {name: "陈十二", age: 29, city: "广州", gender: "male"} // 修改数组元素 data.hobbies = ["sports", "movies"]; data.hobbies[0] = "reading"; console.log(data.hobbies); // 输出: ["reading", "movies"] -
Python:
data = {"name": "冯十三", "age": 31, "city": "深圳"} # 修改年龄 data["age"] = 32 print(data["age"]) # 输出: 32 # 添加新键值对 data["country"] = "China" print(data) # 输出: {'name': '冯十三', 'age': 32, 'city': '深圳', 'country': 'China'} # 修改列表元素 data["skills"] = ["Python", "Java"] data["skills"][1] = "C++" print(data["skills



还没有评论,来说两句吧...