JSONObject与JSONArray详解
封面图
•
2025-10-01
•
JavaScript
151
0
0
0
`JSONObject` 和 `JSONArray` 是用于处理 **JSON 数据** 的两个核心类,通常在 Java 中使用的是 **org.json** 库(如 [org.json](https://mvnrepository.com/artifact/org.json/json))或者 **Gson**、**Jackson** 等库中提供的类似功能。下面我将详细讲解这两个类的用途、用法以及它们之间的区别。 --- ## 一、什么是 JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,结构清晰、易于阅读和解析。它由键值对组成,支持嵌套结构。 示例: ```json { "name": "Alice", "age": 25, "isStudent": false, "hobbies": ["reading", "coding"], "address": { "city": "Beijing", "country": "China" } } ``` --- ## 二、JSONObject ### 1. 定义 `JSONObject` 是用来表示一个 **JSON 对象**(即 `{}` 包裹的内容),类似于 Java 中的 `Map<String, Object>`。 ### 2. 常见方法 | 方法 | 说明 | |------|------| | `put(String key, Object value)` | 添加键值对 | | `get(String key)` | 获取指定键的值 | | `getString(String key)` | 获取字符串类型的值 | | `getInt(String key)` | 获取整数类型的值 | | `getBoolean(String key)` | 获取布尔类型的值 | | `getJSONArray(String key)` | 获取 JSONArray 类型的值 | | `getJSONObject(String key)` | 获取 JSONObject 类型的值 | | `containsKey(String key)` | 判断是否包含某个键 | | `toString()` | 将对象转换为 JSON 字符串 | ### 3. 示例代码 ```java import org.json.JSONObject; public class Example { public static void main(String[] args) { // 创建一个 JSONObject JSONObject person = new JSONObject(); person.put("name", "Alice"); person.put("age", 25); person.put("isStudent", false); // 获取数据 String name = person.getString("name"); int age = person.getInt("age"); boolean isStudent = person.getBoolean("isStudent"); System.out.println("Name: " + name); System.out.println("Age: " + age); System.out.println("Is Student: " + isStudent); // 转换为字符串 String jsonStr = person.toString(); System.out.println("JSON String: " + jsonStr); } } ``` --- ## 三、JSONArray ### 1. 定义 `JSONArray` 是用来表示一个 **JSON 数组**(即 `[]` 包裹的内容),类似于 Java 中的 `List<Object>`。 ### 2. 常见方法 | 方法 | 说明 | |------|------| | `put(Object value)` | 添加元素到数组末尾 | | `get(int index)` | 获取指定索引的元素 | | `getString(int index)` | 获取字符串类型的元素 | | `getInt(int index)` | 获取整数类型的元素 | | `getBoolean(int index)` | 获取布尔类型的元素 | | `getJSONArray(int index)` | 获取 JSONArray 类型的元素 | | `getJSONObject(int index)` | 获取 JSONObject 类型的元素 | | `length()` | 获取数组长度 | | `toString()` | 转换为 JSON 字符串 | ### 3. 示例代码 ```java import org.json.JSONArray; public class Example { public static void main(String[] args) { // 创建一个 JSONArray JSONArray hobbies = new JSONArray(); hobbies.put("reading"); hobbies.put("coding"); hobbies.put("traveling"); // 获取数据 String firstHobby = hobbies.getString(0); String secondHobby = hobbies.getString(1); System.out.println("First Hobby: " + firstHobby); System.out.println("Second Hobby: " + secondHobby); // 转换为字符串 String jsonStr = hobbies.toString(); System.out.println("JSON Array: " + jsonStr); } } ``` --- ## 四、结合使用:嵌套结构 ### 示例:JSON 对象中包含数组和嵌套对象 ```json { "name": "Alice", "age": 25, "hobbies": ["reading", "coding"], "address": { "city": "Beijing", "country": "China" } } ``` ### Java 实现: ```java import org.json.JSONObject; import org.json.JSONArray; public class Example { public static void main(String[] args) { // 创建地址对象 JSONObject address = new JSONObject(); address.put("city", "Beijing"); address.put("country", "China"); // 创建爱好数组 JSONArray hobbies = new JSONArray(); hobbies.put("reading"); hobbies.put("coding"); // 创建主对象 JSONObject person = new JSONObject(); person.put("name", "Alice"); person.put("age", 25); person.put("hobbies", hobbies); person.put("address", address); // 获取嵌套数据 String city = person.getJSONObject("address").getString("city"); String hobby = person.getJSONArray("hobbies").getString(0); System.out.println("City: " + city); System.out.println("First Hobby: " + hobby); } } ``` --- ## 五、总结对比 | 特性 | JSONObject | JSONArray | |------|------------|-----------| | 表示内容 | 键值对集合(对象) | 元素列表(数组) | | 类似 Java 类型 | Map<String, Object> | List<Object> | | 用于存储 | 复杂结构(如对象) | 简单值或嵌套结构 | | 常用方法 | `put`, `get`, `getString` | `put`, `get`, `getString` | | 示例 | `"name": "Alice"` | `["reading", "coding"]` | --- ## 六、常见使用场景 - **Web API 接口通信**:前后端通过 JSON 传输数据。 - **配置文件**:如 `.json` 配置文件。 - **数据序列化/反序列化**:将 Java 对象转成 JSON 字符串。 --- 如果你有具体的 JSON 结构需要解析或生成,也可以贴出来,我可以帮你写对应的 Java 代码。
上一篇:
AsyncTask的用法
下一篇:
用Fragment实现如新浪微博一样的底部菜单的切换
标题录入,一次不能超过6条
返回顶部
留言
留言
评论