Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Java中JSONArray的用法 掌握JSON数组的处理方式_创想鸟

Java中JSONArray的用法 掌握JSON数组的处理方式

java中处理json数组的核心方法包括引入org.json库,创建jsonarray实例,使用put()添加元素,get()读取元素,修改与删除元素,遍历数组,以及处理嵌套结构和转换为java对象列表。1.首先通过maven或gradle引入org.json依赖;2.创建空数组、从字符串或集合初始化;3.使用put()添加基本类型或jsonobject;4.通过get()或getjsonobject()按索引读取元素;5.使用put(index, value)修改指定位置元素;6.通过循环过滤或remove()删除元素;7.使用for循环遍历并操作每个元素;8.解析嵌套结构时递归访问内部对象或数组;9.结合gson或jackson将数组转为java对象列表;10.注意处理jsonexception、类型转换错误及空指针异常,确保程序健壮性。掌握这些步骤可高效完成数据交换、api接口处理、配置管理等实际应用。

Java中JSONArray的用法 掌握JSON数组的处理方式

Java中JSONArray主要用于处理JSON格式的数组数据,它允许你方便地创建、读取、修改和遍历JSON数组,在数据交换和处理中非常实用。

Java中JSONArray的用法 掌握JSON数组的处理方式

处理JSON数组,关键在于理解JSONArray如何与Java对象以及其他JSON对象交互。下面将详细介绍JSONArray的用法,以及一些实际应用场景。

Java中JSONArray的用法 掌握JSON数组的处理方式

JSONArray是org.json库中的一个类,所以首先需要确保你的项目中引入了这个库。你可以通过Maven或Gradle等构建工具添加依赖。

立即学习“Java免费学习笔记(深入)”;

Java中JSONArray的用法 掌握JSON数组的处理方式

创建JSONArray

可以直接创建一个空的JSONArray,或者从JSON字符串、Java集合等数据源初始化。

// 创建一个空的JSONArrayJSONArray jsonArray = new JSONArray();// 从JSON字符串创建JSONArrayString jsonString = "[{"name":"Alice", "age":30}, {"name":"Bob", "age":25}]";JSONArray jsonArrayFromString = new JSONArray(jsonString);// 从Java List创建JSONArrayList list = Arrays.asList("apple", "banana", "orange");JSONArray jsonArrayFromList = new JSONArray(list);

添加元素

可以使用put()方法向JSONArray中添加元素。可以添加各种类型的数据,包括基本类型、字符串、JSONObject等。

JSONArray jsonArray = new JSONArray();jsonArray.put("hello");jsonArray.put(123);jsonArray.put(true);JSONObject jsonObject = new JSONObject();jsonObject.put("key", "value");jsonArray.put(jsonObject);

读取元素

使用get(int index)方法可以根据索引获取JSONArray中的元素。注意,索引从0开始。

JSONArray jsonArray = new JSONArray("[{"name":"Alice", "age":30}, {"name":"Bob", "age":25}]");JSONObject firstObject = jsonArray.getJSONObject(0);String name = firstObject.getString("name"); // 获取Aliceint age = firstObject.getInt("age"); // 获取30System.out.println("Name: " + name + ", Age: " + age);

修改元素

可以使用put(int index, Object value)方法修改指定索引位置的元素。

Find JSON Path Online Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online 30 查看详情 Find JSON Path Online

JSONArray jsonArray = new JSONArray(Arrays.asList("apple", "banana", "orange"));jsonArray.put(1, "grape"); // 将索引1的元素从"banana"修改为"grape"System.out.println(jsonArray.toString()); // 输出:["apple","grape","orange"]

删除元素

JSONArray没有直接删除元素的方法,但可以通过创建一个新的JSONArray,将不需要删除的元素添加到新数组中,或者使用remove(int index)方法移除指定位置的元素,但这个方法会导致后续元素向前移动,如果频繁操作,效率会比较低。

JSONArray jsonArray = new JSONArray(Arrays.asList("apple", "banana", "orange"));JSONArray newJsonArray = new JSONArray();for (int i = 0; i < jsonArray.length(); i++) {    if (i != 1) { // 排除索引为1的元素        newJsonArray.put(jsonArray.get(i));    }}System.out.println(newJsonArray.toString()); // 输出:["apple","orange"]

或者:

JSONArray jsonArray = new JSONArray(Arrays.asList("apple", "banana", "orange"));jsonArray.remove(1);System.out.println(jsonArray.toString()); // 输出:["apple","orange"]

遍历JSONArray

可以使用循环遍历JSONArray中的所有元素。

JSONArray jsonArray = new JSONArray(Arrays.asList("apple", "banana", "orange"));for (int i = 0; i < jsonArray.length(); i++) {    String fruit = jsonArray.getString(i);    System.out.println(fruit);}

JSONArray的常见应用场景

数据交换: 在Web开发中,经常使用JSON作为数据交换的格式。JSONArray可以方便地将Java对象转换为JSON数组,或者将JSON数组转换为Java对象。API接口: 很多API接口返回的数据都是JSON格式的数组。使用JSONArray可以方便地解析这些数据,提取所需的信息。数据存储: 可以将JSONArray存储到文件中,或者存储到数据库中。读取时,再将文件或数据库中的数据转换为JSONArray。配置管理: 可以将配置信息存储在JSON文件中,使用JSONArray读取配置信息,并将其应用到程序中。

如何处理嵌套的JSONArray

嵌套的JSONArray指的是JSONArray中包含JSONArray或JSONObject,JSONObject中又包含JSONArray。处理嵌套的JSONArray需要递归地访问每个元素。

String jsonString = "[{"name":"Alice", "age":30, "skills":["Java", "Python"]}, {"name":"Bob", "age":25, "skills":["JavaScript", "HTML"]}]";JSONArray jsonArray = new JSONArray(jsonString);for (int i = 0; i < jsonArray.length(); i++) {    JSONObject person = jsonArray.getJSONObject(i);    String name = person.getString("name");    int age = person.getInt("age");    JSONArray skills = person.getJSONArray("skills");    System.out.println("Name: " + name + ", Age: " + age + ", Skills: " + skills.toString());    for (int j = 0; j < skills.length(); j++) {        String skill = skills.getString(j);        System.out.println("  - " + skill);    }}

如何将JSONArray转换为Java对象列表

有时候需要将JSONArray转换为Java对象列表,方便在程序中使用。可以使用Gson或Jackson等库来实现。

使用Gson

String jsonString = "[{"name":"Alice", "age":30}, {"name":"Bob", "age":25}]";Gson gson = new Gson();List personList = gson.fromJson(jsonString, new TypeToken<List>(){}.getType());for (Person person : personList) {    System.out.println("Name: " + person.getName() + ", Age: " + person.getAge());}class Person {    private String name;    private int age;    public String getName() {        return name;    }    public int getAge() {        return age;    }}

使用Jackson

String jsonString = "[{"name":"Alice", "age":30}, {"name":"Bob", "age":25}]";ObjectMapper objectMapper = new ObjectMapper();List personList = objectMapper.readValue(jsonString, new TypeReference<List>(){});for (Person person : personList) {    System.out.println("Name: " + person.getName() + ", Age: " + person.getAge());}class Person {    private String name;    private int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}

JSONArray在使用中可能遇到的问题及解决方案

JSONException: 当尝试访问不存在的索引或键时,会抛出JSONException。需要在使用get()方法之前,先使用has()方法判断索引或键是否存在。类型转换错误: 当尝试将JSONArray中的元素转换为错误的类型时,会抛出ClassCastException。需要确保转换的类型与JSONArray中元素的实际类型一致。空指针异常: 当JSONArray为null时,尝试访问其元素会抛出NullPointerException。需要在使用JSONArray之前,先判断其是否为null。

try {    JSONArray jsonArray = new JSONArray("[{"name":"Alice", "age":30}, {"name":"Bob", "age":25}]");    JSONObject firstObject = jsonArray.getJSONObject(0);    if (firstObject.has("name")) {        String name = firstObject.getString("name");        System.out.println("Name: " + name);    } else {        System.out.println("Key 'name' not found.");    }    if (jsonArray != null) {        JSONObject obj = jsonArray.getJSONObject(2); // 假设访问索引为2的元素    }} catch (JSONException e) {    System.err.println("JSONException: " + e.getMessage());} catch (NullPointerException e) {    System.err.println("NullPointerException: " + e.getMessage());} catch (Exception e) {    System.err.println("Exception: " + e.getMessage());}

掌握JSONArray的用法,可以让你在Java中更加灵活地处理JSON数据,提高开发效率。通过学习本文,你应该能够熟练地创建、读取、修改和遍历JSONArray,并解决在使用过程中可能遇到的问题。

以上就是Java中JSONArray的用法 掌握JSON数组的处理方式的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/262438.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
CentOS怎么编译安装Nginx+MySQL+PHP
上一篇 2025年11月4日 09:29:24
linux中的nginx是什么
下一篇 2025年11月4日 09:29:30

相关推荐

  • Perplexity AI的答案准确吗 Perplexity AI信息可靠性评估

    Perplexity AI的答案准确吗 Perplexity AI信息可靠性评估Perplexity AI的答案准确吗 Perplexity AI信息可靠性评估Perplexity AI的答案准确吗 Perplexity AI信息可靠性评估Perplexity AI的答案准确吗 Perplexity AI信息可靠性评估

    本文将探讨Perplexity AI答案的准确性问题,并提供一套评估其信息可靠性的方法。我们将详细介绍用户如何通过检查引用来源、核实关键信息等步骤,系统性地验证Perplexity AI提供的答案,帮助用户更好地利用这一工具,确保获取的信息尽可能可靠。 ☞☞☞AI 智能聊天, 问答助手, AI 智能…

    2026年10月2日 • 用户投稿
    000
  • [windows工具]批量OCR指定区域图片自动识别内容重命名软件1.3版本使用教程及注意事项

    [windows工具]批量OCR指定区域图片自动识别内容重命名软件1.3版本使用教程及注意事项[windows工具]批量OCR指定区域图片自动识别内容重命名软件1.3版本使用教程及注意事项[windows工具]批量OCR指定区域图片自动识别内容重命名软件1.3版本使用教程及注意事项[windows工具]批量OCR指定区域图片自动识别内容重命名软件1.3版本使用教程及注意事项

    OCR区域自动识别重命名工具 Paddle版1.3.1 使用指南 工具概述 ocr区域自动识别重命名工具(paddle版1.3.1)是一款基于paddleocr技术开发的批量图片文件重命名软件,能够智能识别图像中的文字区域,并将识别出的文字内容用作新的文件名。当前版本采用先进的pp-ocv5算法,具…

    2026年10月2日 • 用户投稿
    100
  • 手机qq浏览器广告太多怎么办_手机QQ浏览器广告过滤与净化设置

    手机qq浏览器广告太多怎么办_手机QQ浏览器广告过滤与净化设置手机qq浏览器广告太多怎么办_手机QQ浏览器广告过滤与净化设置手机qq浏览器广告太多怎么办_手机QQ浏览器广告过滤与净化设置手机qq浏览器广告太多怎么办_手机QQ浏览器广告过滤与净化设置

    首先开启QQ浏览器内置广告过滤功能,进入“我的”-“设置”-“广告过滤”并开启开关;若未解决,可尝试通过“省流加速”模块开启智能防广告或强力拦截模式;如仍存在广告,建议安装uBlock Origin等高评分第三方插件以增强拦截效果。 如果您在使用手机QQ浏览器时频繁遭遇广告弹窗、页面横幅或信息流广告…

    2026年10月2日 • 用户投稿
    100
  • 《时间旅者:重生曙光》最新开发者日志发布

    《时间旅者:重生曙光》最新开发者日志发布《时间旅者:重生曙光》最新开发者日志发布《时间旅者:重生曙光》最新开发者日志发布《时间旅者:重生曙光》最新开发者日志发布

    由bloober team精心打造的第三人称生存恐怖新作《时间旅者:重生曙光(cronos: the new dawn)》今日发布最新一期开发者日志,深入揭示游戏背后宏大的世界观与扑朔迷离的剧情脉络。本期内容聚焦三大核心谜题——人类文明覆灭的真相、「旅者」肩负的真正使命,以及首次正式登场的关键角色「…

    2026年10月2日 • 用户投稿
    000
  • DeepSeek有语音交互吗 DeepSeek语音输入输出功能体验

    DeepSeek有语音交互吗 DeepSeek语音输入输出功能体验DeepSeek有语音交互吗 DeepSeek语音输入输出功能体验DeepSeek有语音交互吗 DeepSeek语音输入输出功能体验DeepSeek有语音交互吗 DeepSeek语音输入输出功能体验

    您提出的关于DeepSeek是否有语音交互功能以及如何体验的问题,本文将为您提供解答。我们将介绍DeepSeek在语音方面的现状,并说明如何结合其文本能力与外部工具实现语音输入和输出的体验,方便您进行尝试了解。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek …

    2026年10月2日 • 用户投稿
    100
  • C盘空间满了怎么办?

    C盘空间满了怎么办?C盘空间满了怎么办?C盘空间满了怎么办?C盘空间满了怎么办?

    大家好!之前我们分享了如何通过转移微信和qq缓存来释放c盘空间,但有些小伙伴反映即使这样做了,c盘依然很快就满了。别担心,今天我们将介绍一个终极解决方案——将其他盘的空间转移给c盘,彻底解决你的空间问题! 首先,为什么要这样做呢?主要是因为硬盘中数据过多,重新分区做系统又太麻烦。 幸运的是,我们可以…

    2026年10月2日 • 用户投稿
    000
  • 在Android应用中捕获并分享MPAndroidChart图表截图

    在Android应用中捕获并分享MPAndroidChart图表截图在Android应用中捕获并分享MPAndroidChart图表截图在Android应用中捕获并分享MPAndroidChart图表截图在Android应用中捕获并分享MPAndroidChart图表截图

    本教程详细介绍了如何在Android应用中,利用MPAndroidChart库的图表功能,高效地捕获BarChart(或其他支持的图表)的屏幕截图,并无需将图片永久保存到本地存储,即可通过Android的Intent机制将其无缝分享至其他社交媒体或应用。文章涵盖了从获取图表Bitmap到构建分享In…

    2026年10月2日 • 用户投稿
    400
  • 豆包AI能做市场分析吗 豆包AI商业分析功能实操指南

    豆包AI能做市场分析吗 豆包AI商业分析功能实操指南豆包AI能做市场分析吗 豆包AI商业分析功能实操指南豆包AI能做市场分析吗 豆包AI商业分析功能实操指南豆包AI能做市场分析吗 豆包AI商业分析功能实操指南

    针对您提出的“豆包AI能做市场分析吗”这一问题,本文将为您详细解答。我们将探讨豆包AI在市场分析领域的潜力,并提供一份实用的操作指南,帮助您了解如何利用豆包AI进行商业分析。文章将分步骤讲解整个过程,方便您理解和学习具体的操作方法。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使…

    2026年10月2日 • 用户投稿
    000
  • sublime如何运行代码没反应

    sublime如何运行代码没反应sublime如何运行代码没反应sublime如何运行代码没反应sublime如何运行代码没反应

    代码在 Sublime 中无响应的原因可能是代码语法错误、缺少依赖项、配置错误、系统资源不足或网络连接问题。解决方案包括检查语法、安装依赖项、检查配置、检查系统资源、检查网络连接、重启 Sublime、使用调试器或寻求帮助。 Sublime 中代码无响应:原因和解决方案 Sublime Text 是…

    2026年10月2日 • 用户投稿
    100
  • Win10 Chromium Edge新权限:阻止不安全内容

    Win10 Chromium Edge新权限:阻止不安全内容Win10 Chromium Edge新权限:阻止不安全内容Win10 Chromium Edge新权限:阻止不安全内容Win10 Chromium Edge新权限:阻止不安全内容

    和市面上多数其他浏览器一样,基于chromium内核的microsoft edge已经内置了一些规则,用于针对我们访问的每一个网站来设定权限。当然,为了提高操作便捷性,我们也能为所有页面统一配置规则,这样就能保证网站对文件、摄像头、麦克风等资源的访问能够得到妥善处理。 近期,微软在其最新的Canar…

    2026年10月2日 • 用户投稿
    000
  • Gemini可以调试代码吗 Gemini编程辅助功能详细评测

    Gemini可以调试代码吗 Gemini编程辅助功能详细评测Gemini可以调试代码吗 Gemini编程辅助功能详细评测Gemini可以调试代码吗 Gemini编程辅助功能详细评测Gemini可以调试代码吗 Gemini编程辅助功能详细评测

    本文将深入探讨Gemini作为编程助手的潜力,重点关注其代码调试能力以及提供的其他辅助功能。我们将详细介绍如何利用Gemini进行代码调试和获取编程帮助,通过讲解具体操作流程,帮助用户了解和掌握使用技巧。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 …

    2026年10月2日 • 用户投稿
    000
  • EyeCare护眼工具如何优化日常提醒_EyeCare护眼工具日常提醒优化方法完整

    EyeCare护眼工具如何优化日常提醒_EyeCare护眼工具日常提醒优化方法完整EyeCare护眼工具如何优化日常提醒_EyeCare护眼工具日常提醒优化方法完整EyeCare护眼工具如何优化日常提醒_EyeCare护眼工具日常提醒优化方法完整EyeCare护眼工具如何优化日常提醒_EyeCare护眼工具日常提醒优化方法完整

    优化EyeCare提醒设置需调整五方面:一、自定义提醒间隔,如每50分钟休息10分钟;二、编辑个性化提醒内容提升关注度;三、设置免打扰时段及节假日关闭提醒;四、开启行为分析实现智能提醒调节;五、通过云同步统一多设备提醒策略。 如果您在使用EyeCare护眼工具时发现提醒功能不够贴合个人作息或频繁打扰…

    2026年10月2日 • 用户投稿
    000
  • sublime怎么运行代码快捷键

    sublime怎么运行代码快捷键sublime怎么运行代码快捷键sublime怎么运行代码快捷键sublime怎么运行代码快捷键

    Sublime 中运行代码的快捷键为 Ctrl + B(Windows/Linux)或 Cmd + B(macOS)。此快捷键执行下列操作:搜索并执行当前文件中的指定命令(如果有)。尝试在所有文件中搜索命令,并在找到后执行。允许自定义特定语言或文件的运行命令。 Sublime 中运行代码的快捷键 快…

    2026年10月2日 • 用户投稿
    100
  • Js处理滚动条和日期框

    Js处理滚动条和日期框Js处理滚动条和日期框Js处理滚动条和日期框Js处理滚动条和日期框

    文章总览图 此思维导图中的语法要结合文章内容来看,切记不可死读书,要活学活用。 Js处理1.常用的元素基本操作是什么? 四个基本操作。 1.send_keys() 2.click() 3.获取元素的文本内容。 4.获取元素的属性。 find_element_by_xpath()是我们的元素对象。 .…

    2026年10月2日 • 用户投稿
    100
  • sublime是干嘛的 sublime是什么软件

    sublime是干嘛的 sublime是什么软件sublime是干嘛的 sublime是什么软件sublime是干嘛的 sublime是什么软件sublime是干嘛的 sublime是什么软件

    Sublime Text 是一款跨平台代码编辑器,以其速度、可定制性和优雅界面著称。其核心优势包括:强大的插件生态系统,可扩展到各种编程语言和任务。丰富快捷键,提升编码效率。对多种编程语言提供语法高亮和代码自动补全。虽然Sublime Text 并非免费,也缺乏强大的调试功能,但它是一款轻巧灵活的代…

    2026年10月2日 • 用户投稿
    000
  • Win7系统即将停止支持:KDE社区建议迁移到Linux平台

    Win7系统即将停止支持:KDE社区建议迁移到Linux平台Win7系统即将停止支持:KDE社区建议迁移到Linux平台Win7系统即将停止支持:KDE社区建议迁移到Linux平台Win7系统即将停止支持:KDE社区建议迁移到Linux平台

    近期,kde社区发布了一项计划,旨在协助那些因windows 7于2020年1月14日停止支持后面临安全风险的用户,转向linux平台及plasma桌面环境。从下周起,微软将停止向windows 7用户提供任何形式的技术支持与安全补丁,这意味着若不及时更换至其他操作系统如windows 10或mac…

    2026年10月2日 • 用户投稿
    000
  • 悟空浏览器如何导出收藏夹书签_悟空浏览器书签导出为HTML文件教程

    悟空浏览器如何导出收藏夹书签_悟空浏览器书签导出为HTML文件教程悟空浏览器如何导出收藏夹书签_悟空浏览器书签导出为HTML文件教程悟空浏览器如何导出收藏夹书签_悟空浏览器书签导出为HTML文件教程悟空浏览器如何导出收藏夹书签_悟空浏览器书签导出为HTML文件教程

    首先通过悟空浏览器内置功能导出书签为HTML文件,进入书签页面后点击更多选项,选择书签管理并导出为HTML格式,保存至下载目录;若无此功能可手动访问应用数据目录提取书签数据库文件,再用SQLite工具转换为HTML;也可借助第三方同步工具将书签上传云端,在其他设备或浏览器中登录同一账号后导出为HTM…

    2026年10月2日 • 用户投稿
    000
  • sublime是不是免费的

    sublime是不是免费的sublime是不是免费的sublime是不是免费的sublime是不是免费的

    Sublime Text 是一个免费试用但非完全免费的代码编辑器。其核心功能免费使用,但鼓励用户购买许可证支持开发者。它提供轻量、快速和高度可定制的编辑体验,可以通过安装插件扩展其功能。 Sublime Text 是免费试用,但不是完全免费的。 先准备好你的开发环境,确保你的电脑已经安装了操作系统和…

    2026年10月2日 • 用户投稿
    100
  • 炫书网免费小说在线看_炫书网TXT完结下载网

    炫书网免费小说在线看_炫书网TXT完结下载网炫书网免费小说在线看_炫书网TXT完结下载网炫书网免费小说在线看_炫书网TXT完结下载网炫书网免费小说在线看_炫书网TXT完结下载网

    炫书网免费小说在线阅读及TXT下载可通过https://www.xswtxt.net/获取,该平台提供男频女频分类、多种题材覆盖、良好阅读体验与跨设备同步功能。 炫书网免费小说在线看_炫书网TXT完结下载网在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来炫书网免费小说在线看_炫书网TXT完…

    2026年10月2日 • 用户投稿
    000
  • SublimeText快捷键实现代码注释与取消注释

    SublimeText快捷键实现代码注释与取消注释SublimeText快捷键实现代码注释与取消注释SublimeText快捷键实现代码注释与取消注释SublimeText快捷键实现代码注释与取消注释

    在sublime text中,使用快捷键注释和取消注释代码的方法是:1. windows/linux使用ctrl + /,2. macos使用cmd + /。这些快捷键适用于单行和多行注释,提升了开发效率。 引言 在这个快节奏的编程世界中,效率就是一切。Sublime Text,作为一款深受开发者喜…

    2026年10月2日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信