使用JSONObject.getString()时报错:Cannot resolve method ‘getString ...

打印 上一主题 下一主题

主题 1578|帖子 1578|积分 4734

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目次
使用JSONObject.getString()时报错:Cannot resolve method 'getString' in 'JSONObject',JSONObject三种库的用法
一、背景描述
二、问题办理
1、使用org.json.JSONObject读取属性
2、使用org.json.simple.JSONObject读取属性
3、使用cn.hutool.json.JSONObject读取属性
三、三个JSONObject库之间的类似与差别
1、类似点
2、差别点
①方法命名
②依赖体积
③使用便捷性
④扩展性
四、总结

   作者:watermelo37
  涉及范畴:Vue、SpingBoot、Docker、LLM、python等
  
---------------------------------------------------------------------

  
温柔地对待温柔的人,包容的三观就是最大的温柔。

  
---------------------------------------------------------------------

  

  使用JSONObject.getString()时报错:Cannot resolve method 'getString' in 'JSONObject',JSONObject三种库的用法


一、背景描述

        前几天我在修改后端的JSON数据处置惩罚的时间,用了一个很常见的语法:

   即:JSONObject.getString(xxx)
           JSONObject.getString(xxx) 是一个方法调用,它属于 org.json 包中的 JSONObject 类。这个方法用于从 JSONObject 实例中提取与给定键(xxx)相干联的字符串值。JSONObject 是一个用于体现 JSON 对象的类,它允许你以键值对的形式存储和检索数据。
        但是它却报错了:
   Cannot resolve method 'getString' in 'JSONObject'。
          JSONObject对象里面怎么可能没有getString方法呢?我想了一下Java8有许多语法用不了,可能是Java版本落后的问题,可查了一下Java8也是支持JSONObject.getString(xxx)方法的,这就很希奇了。
        平常后端开辟做得少,实在是不明白这种报错,相称于告诉我vue里面没有双向数据绑定一样,摸不着头脑。
二、问题办理

        最后原因实在很简单,JSONObject与JSONObject是不一样的。事实上JSONObject至少有三种类型:


  • org.json.JSONObject
  • org.json.simple.JSONObject
  • cn.hutool.json.JSONObject
        此中只有org.json.JSONObject可以用JSONObject.getString(xxx)这个语法,别的都是不行的。
1、使用org.json.JSONObject读取属性

        正确代码实例:
  1. import org.json.JSONObject;
  2. public class Test {
  3.     public static void main(String[] args) {
  4.         String jsonString = "{ "data": { "post": "8080", "host": "127.0.0.1" } }";
  5.         JSONObject modelInfo = new JSONObject(jsonString);
  6.         JSONObject data = modelInfo.getJSONObject("data");
  7.         String post = data.getString("post");
  8.         String host = data.getString("host");
  9.         System.out.println("Post: " + post);
  10.         System.out.println("Host: " + host);
  11.     }
  12. }
复制代码
2、使用org.json.simple.JSONObject读取属性

        org.json.simple.JSONObject 不支持 getString(xxx) 方法,须要用 get() 方法并手动举行类型转换。
  1. import org.json.simple.JSONObject;
  2. import org.json.simple.parser.JSONParser;
  3. import org.json.simple.parser.ParseException;
  4. public class Test {
  5.     public static void main(String[] args) {
  6.         String jsonString = "{ "data": { "post": "8080", "host": "127.0.0.1" } }";
  7.         JSONParser parser = new JSONParser();
  8.         try {
  9.             JSONObject modelInfo = (JSONObject) parser.parse(jsonString);
  10.             JSONObject data = (JSONObject) modelInfo.get("data");
  11.             String post = (String) data.get("post");
  12.             String host = (String) data.get("host");
  13.             System.out.println("Post: " + post);
  14.             System.out.println("Host: " + host);
  15.         } catch (ParseException e) {
  16.             e.printStackTrace();
  17.         }
  18.     }
  19. }
复制代码
3、使用cn.hutool.json.JSONObject读取属性

        cn.hutool.json.JSONObject 使用的是 Hutool 工具包的实现,须要调用 getStr() 方法。
  1. import cn.hutool.json.JSONObject;
  2. public class Test {
  3.     public static void main(String[] args) {
  4.         String jsonString = "{ "data": { "post": "8080", "host": "127.0.0.1" } }";
  5.         JSONObject modelInfo = new JSONObject(jsonString);
  6.         JSONObject data = modelInfo.getJSONObject("data");
  7.         String post = data.getStr("post");
  8.         String host = data.getStr("host");
  9.         System.out.println("Post: " + post);
  10.         System.out.println("Host: " + host);
  11.     }
  12. }
复制代码
        可以发现,这三种库虽然都可以使用 JSONObject 对象,但那是三个库调取数据的方法各不类似,相比之下js是真的香,管你什么对象,统一用“.”调取属性数据。不明白控制数据类型为什么要控制对象属性的读取方法,有知道的大佬可以在评论区说一下,后端开辟不是我的专长,我就不自作聪明白。
三、三个JSONObject库之间的类似与差别

1、类似点


  • 三种库都提供了 JSONObject 类来解析和操作 JSON 数据。
  • 它们都以键值对的形式存储 JSON 数据,支持嵌套对象和数组的解析。
  • 适用于解析 JSON 字符串、构建 JSON 对象、序列化和反序列化。
2、差别点

①方法命名

        org.json.JSONObject 使用 getString() 等专门方法访问数据。org.json.simple.JSONObject 使用通用的 get() 方法,须要手动举行类型转换。cn.hutool.json.JSONObject 使用更机动的 getStr()、getInt() 等方法。
②依赖体积

        org.json 是一个轻量级库,适合简单场景。org.json.simple 同样轻量,但功能较少。cn.hutool.json 是 Hutool 工具包的一部分,提供了更多功能,但依赖体积较大。
③使用便捷性

        org.json.JSONObject 和 cn.hutool.json.JSONObject 更易用,方法计划贴近实际开辟需求。org.json.simple.JSONObject 的 API 显得较为笨拙。
④扩展性

        cn.hutool.json.JSONObject 提供了丰富的工具方法,支持链式调用和更多的类型支持。
四、总结

        通过以上对比可以发现,虽然这三种库都可以操作 JSON 数据,但它们的功能计划和使用场景各不类似:


  • org.json.JSONObject 适合基础场景,方法直观易懂。
  • org.json.simple.JSONObject 功能最简单,须要更多手动操作。
  • cn.hutool.json.JSONObject 适合复杂项目,提供了更强的扩展能力。
        只有锻炼头脑才能可连续地办理问题,只有头脑才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,贫苦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
        其他热门文章,请关注:
        极致的机动度满足工程美学:用Vue Flow绘制一个完美流程图
        你真的会使用Vue3的onMounted钩子函数吗?Vue3中onMounted的用法详解
        通过array.filter()实现数组的数据筛选、数据清洗和链式调用
        通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能
        通过MongoDB Atlas 实现语义搜刮与 RAG——迈向AI的搜刮机制
        TreeSize:免费的磁盘整理与管理神器,办理C盘爆满的燃眉之急
        el-table实现动态数据的及时排序,一篇文章讲清楚elementui的表格排序功能
        深入明白 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解
        MutationObserver详解+案例——深入明白 JavaScript 中的 MutationObserver
        Dockerfile全面指南:从基础到进阶,把握容器化构建的核心工具
        在线编程实现!怎样在Java后端通过DockerClient操作Docker生成python情况
        干货含源码!怎样用Java后端操作Docker(下令行篇)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

风雨同行

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表