从JSON串中提取数据的值:实用指南与代码示例
在数据交互的世界里,JSON(JavaScript Object Notation)已成为轻量级数据交换的主流格式,无论是API响应、配置文件还是日志数据,我们经常需要从JSON串中提取特定字段的值,本文将以通俗易懂的方式,结合不同编程语言的代码示例,详细介绍从JSON串中取数据的值的方法。
理解JSON的基本结构
在提取数据前,先要明确JSON的两种核心结构:
- 对象(Object):用 包裹,由“键值对”组成,如
{"name": "张三", "age": 25},name是键,"张三"是对应的值。 - 数组(Array):用
[]包裹,由有序值列表组成,如[{"name": "李四"}, {"name": "王五"}],数组中的每个元素可以是对象、基本类型(字符串、数字、布尔值等)或嵌套的数组/对象。
结构后,提取数据的核心思路就是:通过“键”定位对象中的值,通过“索引”定位数组中的元素。
从JSON对象中提取值(单层与嵌套)
JSON对象是最常见的数据结构,提取值的关键是使用键名逐层访问。
单层对象:直接通过键名访问
如果JSON对象没有嵌套,直接通过键名即可获取值,以下以Python、JavaScript和Java为例:
Python(使用json库)
Python的json库可将JSON字符串解析为字典,之后通过字典的键访问值:
import json
json_str = '{"name": "张三", "age": 25, "city": "北京"}'
data = json.loads(json_str) # 解析为字典
name = data["name"] # 通过键名直接访问
age = data["age"]
print(name, age) # 输出:张三 25
JavaScript(原生方法)
JavaScript中,JSON字符串可通过JSON.parse()转为对象,之后用点()或方括号([])访问键:
let jsonStr = '{"name": "张三", "age": 25, "city": "北京"}';
let data = JSON.parse(jsonStr); // 解析为对象
let name = data.name; // 或 data["name"]
let age = data["age"];
console.log(name, age); // 输出:张三 25
Java(使用Gson库)
Java中常用Gson或Jackson库解析JSON,以下是Gson示例:
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class JsonExtract {
public static void main(String[] args) {
String jsonStr = "{\"name\": \"张三\", \"age\": 25, \"city\": \"北京\"}";
JsonObject data = JsonParser.parseString(jsonStr).getAsJsonObject(); // 解析为JsonObject
String name = data.get("name").getAsString(); // 获取字符串值
int age = data.get("age").getAsInt(); // 获取整数值
System.out.println(name + " " + age); // 输出:张三 25
}
}
嵌套对象:逐层“点”或“[]”访问
当JSON对象包含嵌套结构时,需从外到内逐层通过键名访问。
{
"name": "李四",
"info": {
"age": 30,
"contact": {
"email": "lisi@example.com",
"phone": "13800138000"
}
}
}
Python示例
import json
json_str = """{
"name": "李四",
"info": {
"age": 30,
"contact": {
"email": "lisi@example.com",
"phone": "13800138000"
}
}
}"""
data = json.loads(json_str)
# 逐层访问:先取"info",再取"contact",最后取"email"
email = data["info"]["contact"]["email"]
phone = data["info"]["contact"]["phone"]
print(email, phone) # 输出:lisi@example.com 13800138000
JavaScript示例
let jsonStr = `{
"name": "李四",
"info": {
"age": 30,
"contact": {
"email": "lisi@example.com",
"phone": "13800138000"
}
}
}`;
let data = JSON.parse(jsonStr);
let email = data.info.contact.email;
let phone = data.info.contact.phone;
console.log(email, phone); // 输出:lisi@example.com 13800138000
Java(Gson)示例
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class NestedJsonExtract {
public static void main(String[] args) {
String jsonStr = "{\n" +
" \"name\": \"李四\",\n" +
" \"info\": {\n" +
" \"age\": 30,\n" +
" \"contact\": {\n" +
" \"email\": \"lisi@example.com\",\n" +
" \"phone\": \"13800138000\"\n" +
" }\n" +
" }\n" +
"}";
JsonObject data = JsonParser.parseString(jsonStr).getAsJsonObject();
JsonObject contact = data.getAsJsonObject("info").getAsJsonObject("contact");
String email = contact.get("email").getAsString();
String phone = contact.get("phone").getAsString();
System.out.println(email + " " + phone); // 输出:lisi@example.com 13800138000
}
}
从JSON数组中提取值(单层与嵌套)
JSON数组用于存储有序数据,提取值时需通过索引(从0开始)定位元素,再结合对象访问方法获取具体值。
单层数组:通过索引访问元素
例如JSON数组:
[
{"name": "王五", "age": 28},
{"name": "赵六", "age": 32},
{"name": "钱七", "age": 29}
]
Python示例
import json
json_str = """[
{"name": "王五", "age": 28},
{"name": "赵六", "age": 32},
{"name": "钱七", "age": 29}
]"""
data = json.loads(json_str) # 解析为列表
# 取第一个元素(索引0)的"name"
first_name = data[0]["name"]
# 取第二个元素(索引1)的"age"
second_age = data[1]["age"]
print(first_name, second_age) # 输出:王五 32
JavaScript示例
let jsonStr = `[
{"name": "王五", "age": 28},
{"name": "赵六", "age": 32},
{"name": "钱七", "age": 29}
]`;
let data = JSON.parse(jsonStr); // 解析为数组
let first_name = data[0].name;
let second_age = data[1].age;
console.log(first_name, second_age); // 输出:王五 32
Java(Gson)示例
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
public class ArrayJsonExtract {
public static void main(String[] args) {
String jsonStr = "[\n" +
" {\"name\": \"王五\", \"age\": 28},\n" +
" {\"name\": \"赵六\", \"age\": 32},\n" +
" {\"name\": \"钱七\", \"age\": 29}\n" +
"]";
JsonArray data = JsonParser.parseString(jsonStr).getAsJsonArray(); // 解析为JsonArray
// 取第一个元素(索引0)的"name"
String first_name = data.get(0).getAsJsonObject().get("name").getAsString();
// 取第二个元素(索引1)的"age"
int second_age = data.get(1).getAsJsonObject().get("age").getAsInt();
System.out.println(first_name + " " + second_age); // 输出:王五 32
}
}
数组嵌套对象/数组:索引+键/索引组合
当数组元素是嵌套对象或数组时,需先通过索引定位元素,再通过键(对象)或索引(数组)访问。
{
"users": [
{"name": "孙八", "hobbies": ["篮球", "编程"]},
{"name": "周九


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