使用JSOObject.getString()时报错:Cannot resolve method ‘getString‘ in ‘JSOObject‘,详解JSOObject三种库的用法
使用JSOObject.getString()时报错:Cannot resolve method ‘getString‘ in ‘JSOObject‘,详解JSOObject三种库的用法
作者:watermelo7 涉及领域:Vue、SpingBoot、Docker、LLM、python等 --------------------------------------------------------------------- 温柔地对待温柔的人,包容的三观就是最大的温柔。 ---------------------------------------------------------------------
一、背景描述
前几天我在修改后端的JSO数据处理的时候,用了一个很常见的语法:
即:JSOObject.getString(xxx)
JSOObject.getString(xxx) 是一个方法调用,它属于 org.json 包中的 JSOObject 类。这个方法用于从 JSOObject 实例中提取与给定键(xxx)相关联的字符串值。JSOObject 是一个用于表示 JSO 对象的类,它允许你以键值对的形式存储和检索数据。
但是它却报错了:
Cannot resolve method 'getString' in 'JSOObject'。
JSOObject对象里面怎么可能没有getString方法呢?我想了一下Java8有很多语法用不了,可能是Java版本落后的问题,可查了一下Java8也是支持JSOObject.getString(xxx)方法的,这就很奇怪了。
平时后端开发做得少,实在是不理解这种报错,相当于告诉我vue里面没有双向数据绑定一样,摸不着头脑。
二、问题解决
最后原因其实很简单,JSOObject与JSOObject是不一样的。事实上JSOObject至少有三种类型:
- org.json.JSOObject
- org.json.simple.JSOObject
- cn.hutool.json.JSOObject
其中只有org.json.JSOObject可以用JSOObject.getString(xxx)这个语法,别的都是不行的。
1、使用org.json.JSOObject读取属性
正确代码实例:
代码语言:javascript代码运行次数:0运行复制import org.json.JSOObject;
public class Test {
public static void main(String[] args) {
String jsonString = "{ \"data\": { \"post\": \"8080\", \"host\": \"127.0.0.1\" } }";
JSOObject modelInfo = new JSOObject(jsonString);
JSOObject data = modelInfo.getJSOObject("data");
String post = data.getString("post");
String host = data.getString("host");
println("Post: " + post);
println("Host: " + host);
}
}
2、使用org.json.simple.JSOObject读取属性
org.json.simple.JSOObject 不支持 getString(xxx) 方法,需要用 get() 方法并手动进行类型转换。
代码语言:javascript代码运行次数:0运行复制import org.json.simple.JSOObject;
import org.json.simple.parser.JSOParser;
import org.json.simple.parser.ParseException;
public class Test {
public static void main(String[] args) {
String jsonString = "{ \"data\": { \"post\": \"8080\", \"host\": \"127.0.0.1\" } }";
JSOParser parser = new JSOParser();
try {
JSOObject modelInfo = (JSOObject) parser.parse(jsonString);
JSOObject data = (JSOObject) modelInfo.get("data");
String post = (String) data.get("post");
String host = (String) data.get("host");
println("Post: " + post);
println("Host: " + host);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
、使用cn.hutool.json.JSOObject读取属性
cn.hutool.json.JSOObject 使用的是 Hutool 工具包的实现,需要调用 getStr() 方法。
代码语言:javascript代码运行次数:0运行复制import cn.hutool.json.JSOObject;
public class Test {
public static void main(String[] args) {
String jsonString = "{ \"data\": { \"post\": \"8080\", \"host\": \"127.0.0.1\" } }";
JSOObject modelInfo = new JSOObject(jsonString);
JSOObject data = modelInfo.getJSOObject("data");
String post = data.getStr("post");
String host = data.getStr("host");
println("Post: " + post);
println("Host: " + host);
}
}
可以发现,这三种库虽然都可以使用 JSOObject 对象,但那是三个库调取数据的方法各不相同,相比之下js是真的香,管你什么对象,统一用“.”调取属性数据。不明白控制数据类型为什么要控制对象属性的读取方法,有知道的大佬可以在评论区说一下,后端开发不是我的专长,我就不自作聪明了。
三、三个JSOObject库之间的相同与不同
1、相同点
- 三种库都提供了 JSOObject 类来解析和操作 JSO 数据。
- 它们都以键值对的形式存储 JSO 数据,支持嵌套对象和数组的解析。
- 适用于解析 JSO 字符串、构建 JSO 对象、序列化和反序列化。
2、不同点
①方法命名
org.json.JSOObject 使用 getString() 等专门方法访问数据。org.json.simple.JSOObject 使用通用的 get() 方法,需要手动进行类型转换。cn.hutool.json.JSOObject 使用更灵活的 getStr()、getInt() 等方法。
②依赖体积
org.json 是一个轻量级库,适合简单场景。org.json.simple 同样轻量,但功能较少。cn.hutool.json 是 Hutool 工具包的一部分,提供了更多功能,但依赖体积较大。
③使用便捷性
org.json.JSOObject 和 cn.hutool.json.JSOObject 更易用,方法设计贴近实际开发需求。org.json.simple.JSOObject 的 API 显得较为笨拙。
④扩展性
cn.hutool.json.JSOObject 提供了丰富的工具方法,支持链式调用和更多的类型支持。
四、总结
通过以上对比可以发现,虽然这三种库都可以操作 JSO 数据,但它们的功能设计和使用场景各不相同:
- org.json.JSOObject 适合基础场景,方法直观易懂。
- org.json.simple.JSOObject 功能最简单,需要更多手动操作。
- cn.hutool.json.JSOObject 适合复杂项目,提供了更强的扩展能力。
只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-12-0,如有侵权请联系 cloudcommunity@tencent 删除json对象后端开发数据#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上一篇:高效工作流:用Mermaid绘制你的专属流程图;如何在Vue3中导入mermaid绘制流程图
下一篇:详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
推荐阅读
留言与评论(共有 5 条评论) |
本站网友 龙飞九天 | 29分钟前 发表 |
--------------------------------------------------------------------- 使用JSOObject.getString()时报错:Cannot resolve method 'getString' in 'JSOObject' | |
本站网友 吕珍九 | 28分钟前 发表 |
getInt() 等方法 | |
本站网友 c盘减肥 | 5分钟前 发表 |
" + post); println("Host | |
本站网友 淄博友谊医院 | 20分钟前 发表 |
不明白控制数据类型为什么要控制对象属性的读取方法 |