JSON用法总结

1. JSON是什么

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,本质就是具有特定格式的字符串,常用于客户端和服务器端交换数据。


2. JSON数据格式

  • json数组:[value1, value2, value3] ,对应Java里的数组或list

  • json对象:{key1:value1, key2:value2, key3:value3},对应Java里的Map或自定义对象

    key数据类型:字符串
    value数据类型:数值、字符串、null、json数组[]、json对象{}
    例如:[1, “ab”, [], {“n”:123, “b”:”abc”}]


3. 解析方式

3.1 Android原生API
JsonObject:json对象{}
    JSONObject(String json):将json字符串解析为json对象
    Xxx getXxx(String name):根据name,在json对象中得到对应的value

JsonArray:json数组[]
    JSONArray(String json):将json字符串解析为json数组
    int length():得到json数组中元素的个数
    Xxx getXxx(int index):根据下标得到json数组中对应的元素数据
3.2 Gson框架
Gson():构造对象的方法
    String toJson(Object src):将对象转换为对应格式的json字符串
    T fromJson(String json, Type typeOfT):解析Json字符串,得到对象
TypeToken<T>:用来得到Type的类

4. JSON字符串转换为Java对象

4.1 使用原生API
String jsonString = "{\"id\":1, \"name\":\"one\", \"grade\":100}";
// 1.将json字符串转换为JSONObject对象
JSONObject jsonObject = new JSONObject(jsonString);
// 2.根据key得到相应的value
int id = jsonObject.getInt("id");
String name = jsonObject.getString("name");
int grade = jsonObject.getInt("grade");
// 3.封装为Student对象
Student student = new Student(id, name, grade);
4.2 使用GSon
String jsonString = "{\"id\":1, \"name\":\"one\", \"grade\":100}";
Student student = new Gson().fromJson(jsonString, Student.class);

5. JSON字符串转换为Java对象的List

5.1 使用原生API
String jsonString = "[{\"id\":1, \"name\":\"one\", \"grade\":100}, {\"id\":2, \"name\":\"two\", \"grade\":99}]";
List<Student> list = new ArrayList<Student>();
// 1.将json字符串转换为JSONArray对象
JSONArray jsonArray = new JSONArray(jsonString);
// 2.遍历JSONArray对象所有元素,将每个元素封装为Student对象
for(int i = 0; i < jsonArray.length(); i++){
    JSONObject jsonObject = jsonArray.getJSONObject(i);
    // 3.根据key得到相应的value
    int id = jsonObject.getInt("id");
    String name = jsonObject.getString("name");
    int grade = jsonObject.getInt("grade");
    // 4.封装为Student对象
    Student student = new Student(id, name, grade);
    // 5.添加到List中
    list.add(student);
}
5.2 使用Gson
String jsonString = "[{\"id\":1, \"name\":\"one\", \"grade\":100}, {\"id\":2, \"name\":\"two\", \"grade\":99}]";
List<Student> list = new Gson().fromJson(jsonString, new TypeToken<List<Student>>(){}.getType());

6.使用Gson将Java对象转换为json字符串{}

Student student = new Student(1,"one",100);
String jsonString = new Gson().toJson(student);

7.使用Gson将Java对象的List转换为json字符串[]

List<Student> list = new ArrayList<Student>();
list.add(new Student(1,"one",100));
list.add(new Student(2,"two",99));
String jsonString = new Gson().toJson(list);

8.使用Map封装json对象key的特殊情况

当一些json字符串中的对象属性名很特殊,如包含空格或仅为数字时,不能直接将json字符串转换为Java对象,而是要将其转换为Map:

String jsonString = "{\"my id\":1, \"my name\":\"one\", \"my grade\":100}";
    Map<String, Object> map = new Gson().fromJSon(jsonString, new TypeToken<Map<String, Object>>(){}.getType());

注明:博客整理自网络视频
<think>好的,我现在要帮助用户了解如何使用JSON进行数据交换和解析。首先,我需要整理一下用户的问题,用户提到了JSON的使用方法,特别是数据交换和解析。根据用户提供的引用内容,我需要结合这些信息来构建回答。 首先,用户引用了三个来源,其中引用1提到JSON是标准的数据交换格式,在JavaScript中以对象形式存在,引用2指出JSON比XML轻巧,是JavaScript原生格式,引用3详细说明了解析过程,包括不同语言的解析方法。我需要确保回答中涵盖这些要点,并正确标注引用。 接下来,我需要确定回答的结构。用户希望了解数据交换和解析的具体步骤,所以应该分两部分来讲解。数据交换部分需要说明如何创建JSON数据,可能涉及不同语言中的对象转换。解析部分则要解释如何将JSON字符串转换为数据结构,并举例不同语言的方法。 还要注意系统级指令,比如使用正确的LaTeX格式,虽然这里可能用不上数学公式,但如果有相关内容需要表达,比如数据结构的表示,可能需要使用行内公式。不过JSON本身是文本格式,可能不需要数学表达式,所以可能不需要用到LaTeX,但需要检查是否有必要。例如,如果提到数据结构的复杂度,可能会涉及,但用户的问题更偏向于应用,所以可能可以忽略。 另外,需要生成相关问题。根据用户的示例,问题应围绕JSON的其他方面,比如优缺点、与XML的比较、安全性等。需要确保问题相关且有参考价值。 还需要注意使用中文,保持结构清晰,分步骤说明。确保引用标记正确,比如在提到JSON作为标准数据交换格式时添加[^1],在解析部分提到不同语言的方法时引用[^3]。 可能还需要检查是否有遗漏的信息,比如JSON的语法规则、数据结构类型(键值对、数组等),以及实际应用中的例子。例如,在数据交换中,可以给出一个JSON对象的示例,并说明如何在不同系统之间传输。在解析部分,可以给出JavaScript和Python的代码示例,如使用JSON.parse和json.loads。 还需要提醒用户注意JSON的语法严格性,比如双引号、逗号的使用,避免常见的格式错误。同时,可能提到JSON的应用场景,如API通信、配置文件等,这部分可以结合引用中的内容。 最后,生成的相关问题需要覆盖用户可能感兴趣的扩展内容,比如优缺点、与其他格式的比较、工具支持、安全性等。确保每个问题都有助于用户进一步了解JSON的不同方面。 总结一下,回答的结构可能是: 1. 数据交换的步骤:创建JSON数据(不同语言的生成方法),传输JSON字符串,接收方解析。 2. 解析过程:使用各语言的解析函数,如JavaScript的JSON.parse,Python的json.loads。 3. 示例代码:展示生成和解析JSON的代码片段。 4. 注意事项:语法正确性、数据安全。 5. 相关问题:优缺点、对比XML、工具、安全性等。 需要确保每个部分都正确引用来源,并且语言简洁明了,符合用户的要求。</think>### JSON数据交换与解析方法 #### 一、JSON数据交换步骤 1. **定义数据结构** JSON使用键值对和数组结构存储数据,例如表示用户信息的JSON对象: ```json { "name": "张三", "age": 30, "hobbies": ["阅读", "编程"] } ``` 2. **生成JSON字符串** 在编程语言中将数据对象转换为JSON字符串: - **JavaScript**: ```javascript const user = { name: "张三", age: 30 }; const jsonString = JSON.stringify(user); // 输出: {"name":"张三","age":30} ``` - **Python**: ```python import json user = {"name": "张三", "age": 30} json_string = json.dumps(user) # 输出: {"name": "\u5f20\u4e09", "age": 30} ``` 3. **传输数据** 通过HTTP请求、文件存储或消息队列发送JSON字符串。例如在API接口中: ```http POST /api/user Content-Type: application/json {"name":"李四","age":25} ``` #### 二、JSON解析方法 1. **解析为程序对象** - **JavaScript**: ```javascript const jsonString = '{"name":"王五","age":28}'; const user = JSON.parse(jsonString); // 转换为JS对象 ``` - **Python**: ```python import json json_string = '{"name": "赵六", "age": 35}' user = json.loads(json_string) # 转换为字典 ``` 2. **处理嵌套结构** 支持多层嵌套数据解析,如: ```json { "department": "技术部", "members": [ {"name": "小明", "role": "开发"}, {"name": "小红", "role": "测试"} ] } ``` #### 三、关键注意事项 1. **语法严格性** - 键名必须用双引号包裹 - 不支持注释(部分扩展实现允许) - 逗号结尾会引发解析错误 2. **数据安全性** - 解析时需验证数据来源,避免注入攻击 - 敏感数据建议加密传输 #### 四、典型应用场景 1. Web API交互(如RESTful接口)[^1] 2. 配置文件(如VSCode设置) 3. NoSQL数据库(如MongoDB文档存储) ```python # 完整示例:Python生成与解析JSON import json # 生成 data = {"status": "success", "code": 200} json_str = json.dumps(data, ensure_ascii=False) # 输出: {"status": "success", "code": 200} # 解析 parsed_data = json.loads('{"items": ["A", "B"]}') print(parsed_data["items"][0]) # 输出: A ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值