轻松:JSON数组转换全攻略**
在当今的软件开发和数据交互中,JSON(JavaScript Object Notation)因其轻量级、易读易写的特性,已成为一种非常流行的数据交换格式,无论是前后端数据传输、API接口调用,还是配置文件存储,我们都会频繁与JSON打交道,JSON数组的转换更是日常开发中的高频操作,本文将详细讲解如何在不同场景下进行JSON数组的转换,帮助你轻松应对各种需求。
什么是JSON数组?
我们明确一下JSON数组的定义,JSON数组是JSON中的一种数据结构,它位于方括号 [] 中,元素之间用逗号 分隔,数组中的元素可以是简单的值(如字符串、数字、布尔值、null),也可以是复杂的对象(JSON对象,用花括号 表示)。
一个简单的JSON数组:
[
{"name": "张三", "age": 25, "city": "北京"},
{"name": "李四", "age": 30, "city": "上海"},
{"name": "王五", "age": 28, "city": "广州"}
]
这个数组包含了三个JSON对象,每个对象代表一个人的信息。
常见的JSON数组转换场景及方法
JSON数组的转换通常发生在不同的数据结构之间,或者在不同的编程语言/环境之间,以下是几种最常见的转换场景:
JSON字符串转换为JSON数组(前端JavaScript & 后端各种语言)
这是最常见的一种转换,当我们从服务器获取数据或读取配置文件时, often 得到的是JSON格式的字符串,需要将其转换为程序可操作的数组对象。
前端JavaScript:
使用 JSON.parse() 方法。
const jsonString = '[{"name": "张三", "age": 25}, {"name": "李四", "age": 30}]';
const jsonArray = JSON.parse(jsonString);
console.log(jsonArray); // 输出: [ { name: '张三', age: 25 }, { name: '李四', age: 30 } ]
console.log(jsonArray[0].name); // 输出: 张三
// 注意:如果JSON字符串格式不正确,JSON.parse会抛出异常,通常需要配合try-catch使用
try {
const invalidJson = '{"name": "王五", "age": 30'; // 缺少闭合括号
const invalidArray = JSON.parse(invalidJson);
} catch (error) {
console.error("JSON解析错误:", error.message);
}
后端(以Python为例):
使用 json 模块的 loads() 方法(load from string)。
import json
json_string = '[{"name": "张三", "age": 25}, {"name": "李四", "age": 30}]'
json_array = json.loads(json_string)
print(json_array) # 输出: [{'name': '张三', 'age': 25}, {'name': '李四', 'age': 30}]
print(json_array[0]['name']) # 输出: 张三
# 同样,格式错误会抛出json.JSONDecodeError异常
后端(以Java为例):
可以使用如 Gson、Jackson 或 org.json 等库。
import org.json.JSONArray;
public class JsonArrayConversion {
public static void main(String[] args) {
String jsonString = "[{\"name\": \"张三\", \"age\": 25}, {\"name\": \"李四\", \"age\": 30}]";
JSONArray jsonArray = new JSONArray(jsonString);
System.out.println(jsonArray); // 输出: [{"name":"张三","age":25},{"name":"李四","age":30}]
System.out.println(jsonArray.getJSONObject(0).getString("name")); // 输出: 张三
}
}
JSON数组转换为JSON字符串
当我们需要将数组数据通过网络发送,或者将其保存到文本文件时,需要将数组对象转换为JSON字符串。
前端JavaScript:
使用 JSON.stringify() 方法。
const jsonArray = [
{"name": "张三", "age": 25},
{"name": "李四", "age": 30}
];
const jsonString = JSON.stringify(jsonArray);
console.log(jsonString); // 输出: '[{"name":"张三","age":25},{"name":"李四","age":30}]'
// 可以添加第二个参数(replacer)和第三个参数(space)来格式化输出
const prettyJsonString = JSON.stringify(jsonArray, null, 2);
console.log(prettyJsonString);
/* 输出:
[
{
"name": "张三",
"age": 25
},
{
"name": "李四",
"age": 30
}
]
*/
后端(以Python为例):
使用 json 模块的 dumps() 方法(dump to string)。
import json
json_array = [{"name": "张三", "age": 25}, {"name": "李四", "age": 30}]
json_string = json.dumps(json_array)
print(json_string) # 输出: [{"name": "张三", "age": 25}, {"name": "李四", "age": 30}]
# 同样可以格式化输出
pretty_json_string = json.dumps(json_array, indent=2, ensure_ascii=False)
print(pretty_json_string)
# ensure_ascii=False 确保中文字符正常显示,而不是unicode转义
后端(以Java为例 - 使用Gson):
import com.google.gson.Gson;
import java.util.Arrays;
import java.util.List;
public class JsonArrayToString {
public static void main(String[] args) {
List<Person> personList = Arrays.asList(
new Person("张三", 25),
new Person("李四", 30)
);
Gson gson = new Gson();
String jsonString = gson.toJson(personList);
System.out.println(jsonString); // 输出: [{"name":"张三","age":25},{"name":"李四","age":30}]
}
}
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
JSON数组转换为其他数据结构(如数组、列表、对象映射等)
根据业务需求,我们可能需要将JSON数组转换为特定语言中的原生数组、列表或对象集合。
前端JavaScript:
JSON数组本身在JavaScript中就是数组对象,所以通常不需要额外转换,直接访问元素即可,但如果需要提取特定属性形成新数组,可以使用 map()、filter()、reduce() 等数组方法。
const jsonArray = [
{"name": "张三", "age": 25, "city": "北京"},
{"name": "李四", "age": 30, "city": "上海"}
];
// 提取所有name属性形成新数组
const names = jsonArray.map(item => item.name);
console.log(names); // 输出: ['张三', '李四']
// 筛选出年龄大于28的人
const filtered = jsonArray.filter(item => item.age > 28);
console.log(filtered); // 输出: [{"name": "李四", "age": 30, "city": "上海"}]
后端(以Python为例):
json.loads() 将JSON字符串转换为Python的 list,其中字典对象转换为 dict,可以直接操作。
import json
json_string = '[{"name": "张三", "age": 25}, {"name": "李四", "age": 30}]'
python_list = json.loads(json_string)
print(python_list) # 输出: [{'name': '张三', 'age': 25}, {'name': '李四', 'age': 30}]
print(python_list[0]['name']) # 输出: 张三
# 提取所有name
names = [item['name'] for item in python_list]
print(names) # 输出: ['张三', '李四']
后端(以Java为例 - 使用Jackson转换为List<Map<String, Object>>或自定义对象List):
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.Map;
public class JsonToListConversion {
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = "[{\"name\": \"张三\", \"age\": 25}, {\"name\": \"李四\", \"age\": 30}]";
// 转换为List<Map<String, Object>>
List<Map<String, Object>> listMap = objectMapper.readValue(jsonString, new TypeReference<List<Map<String, Object>>>() {});
System.out.println(listMap);
System.out.println(listMap.get(0).get("name")); // 输出: 张三
// 转换


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