从 JSON 中获取值:全面指南与实用代码示例
在现代软件开发中,JSON(JavaScript Object Notation)已成为数据交换的事实标准,无论是从 API 接收响应、读取配置文件,还是在前后端之间传递数据,我们都不可避免地需要解析 JSON 并从中提取所需的信息,本文将全面、地探讨如何在不同编程环境中,通过“键”(key)来获取对应的“值”(value),并提供清晰的代码示例,帮助你彻底这一核心技能。
核心概念:JSON 是什么?
在开始操作之前,我们首先要理解 JSON 的基本结构,JSON 数据本质上是一个键值对的集合,它有两种主要结构:
-
对象:由花括号 包围,是一个无序的“键/值”对集合,每个键都是一个字符串,后面跟着一个冒号 ,然后是对应的值,多个键值对之间用逗号 分隔。
{ "name": "张三", "age": 30, "isStudent": false, "address": { "city": "北京", "district": "朝阳区" } } -
数组:由方括号
[]包围,是一个值的有序列表,值之间用逗号 分隔,数组的值也可以是对象,这使得 JSON 能够表达复杂的数据结构。[ { "id": 1, "product": "苹果" }, { "id": 2, "product": "香蕉" } ]
我们的目标就是从这些结构中,通过已知的“键”(如 "name")来找到它对应的“值”(如 "张三")。
在不同语言中获取 JSON 值
虽然 JSON 源自 JavaScript,但如今几乎所有的主流编程语言都提供了强大的库来处理 JSON,下面我们以几种最流行的语言为例,展示如何获取值。
JavaScript / TypeScript (原生)
在 JavaScript 中,处理 JSON 数据非常直观,通常我们从一个 JSON 字符串开始,需要先将其解析成一个 JavaScript 对象。
步骤:
- 解析 JSON 字符串:使用
JSON.parse()方法。 - 通过键访问值:使用点 语法或方括号
[]语法。
示例代码:
// 1. 一个 JSON 格式的字符串
const jsonString = '{"name": "李四", "age": 25, "hobbies": ["reading", "coding"]}';
// 2. 将 JSON 字符串解析为 JavaScript 对象
const dataObject = JSON.parse(jsonString);
// 3. 通过键获取值
console.log(dataObject.name); // 输出: 李四 (使用点语法)
console.log(dataObject['age']); // 输出: 25 (使用方括号语法)
// 4. 处理嵌套对象
const nestedJsonString = '{"user": {"id": 101, "status": "active"}}';
const nestedData = JSON.parse(nestedJsonString);
console.log(nestedData.user.status); // 输出: active
// 5. 处理数组
const arrayJsonString = '[{"task": "学习"}, {"task": "工作"}]';
const taskArray = JSON.parse(arrayJsonString);
console.log(taskArray[0].task); // 输出: 学习
重要提示:安全访问
如果键可能不存在,直接访问会抛出错误 (TypeError: Cannot read properties of undefined),推荐使用可选链操作符 来安全地访问嵌套属性。
const user = { id: 1, profile: { name: "王五" } };
// 安全访问,profile 或 name 不存在,不会报错,而是返回 undefined
console.log(user.profile?.name); // 输出: 王五
console.log(user.address?.street); // 输出: undefined (而不是报错)
Python
Python 的 json 库是处理 JSON 数据的标准工具,解析后,JSON 对象会变成 Python 的字典,JSON 数组会变成列表。
步骤:
- 解析 JSON 字符串:使用
json.loads()方法。 - 通过键访问值:使用字典的键访问语法
dictionary['key']。
示例代码:
import json
# 1. 一个 JSON 格式的字符串
json_string = '{"city": "上海", "population": 26320000}'
# 2. 将 JSON 字符串解析为 Python 字典
data_dict = json.loads(json_string)
# 3. 通过键获取值
print(data_dict['city']) # 输出: 上海
# 4. 处理嵌套对象
nested_json_string = '{"company": {"name": "某科技公司", "employees": 500}}'
nested_data = json.loads(nested_json_string)
print(nested_data['company']['name']) # 输出: 某科技公司
# 5. 处理数组
array_json_string = '[{"fruit": "orange"}, {"fruit": "grape"}]'
fruit_list = json.loads(array_json_string)
print(fruit_list[1]['fruit']) # 输出: grape
# 6. 安全访问:使用 .get() 方法
# 如果键不存在,.get() 会返回 None 或指定的默认值,而不会抛出 KeyError
print(data_dict.get('country', '未知')) # 输出: 未知
Java
在 Java 中,通常使用第三方库如 Gson (Google) 或 Jackson 来处理 JSON,因为它们比手动解析要方便得多,这里以 Gson 为例。
步骤:
- 添加依赖:如果你使用 Maven,在
pom.xml中添加:<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency> - 解析 JSON 字符串:使用
new Gson().fromJson(jsonString, YourClass.class)。 - 通过 getter 方法访问值:Gson 会将 JSON 对象映射到 Java 对象,通过调用对象的 getter 方法来获取值。
示例代码:
import com.google.gson.Gson;
// 1. 定义一个与 JSON 结构匹配的 Java 类
class Person {
private String name;
private int age;
// 必须有无参构造函数
public Person() {}
// Getter 和 Setter 方法
public String getName() { return name; }
public int getAge() { return age; }
public void setName(String name) { this.name = name; }
public void setAge(int age) { this.age = age; }
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
public class JsonExample {
public static void main(String[] args) {
// 2. 一个 JSON 格式的字符串
String jsonString = "{\"name\": \"赵六\", \"age\": 40}";
// 3. 创建 Gson 实例
Gson gson = new Gson();
// 4. 将 JSON 字符串解析为 Person 对象
Person person = gson.fromJson(jsonString, Person.class);
// 5. 通过 getter 方法访问值
System.out.println(person.getName()); // 输出: 赵六
System.out.println(person.getAge()); // 输出: 40
}
}
对于复杂的 JSON,可以使用 Map 或 JsonElement 进行更灵活的访问。
C#
在 C# 中,通常使用内置的 System.Text.Json 命名空间(推荐用于 .NET Core 3.0+)或第三方库 Newtonsoft.Json。
步骤 (使用 System.Text.Json):
- 反序列化 JSON:使用
JsonSerializer.Deserialize<T>()。 - 通过属性访问值:C# 类的属性会自动映射到 JSON 的键。
示例代码:
using System;
using System.Text.Json;
// 1. 定义一个与 JSON 结构匹配的 C# 类
public class Car
{
public string Model { get; set; }
public int Year { get; set; }
}
class Program
{
static void Main(string[] args)
{
// 2. 一个 JSON 格式的字符串
string jsonString = "{\"Model\": \"Model 3\", \"Year\": 2022}";
// 3. 反序列化为 Car 对象
Car car = JsonSerializer.Deserialize<Car>(jsonString);
// 4. 通过属性访问值
Console.WriteLine($"Model: {car.Model}"); // 输出: Model: Model 3
Console.WriteLine($"Year: {car.Year}"); // 输出: Year: 2022
}
}
通用最佳实践
无论使用哪种



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