java中关于引用net.sf.json.JSONObject 和org.json.JSONObject 的差别
一、首先今天在写一个功能时遇到和这个问题,就是在调用的百度识别接口需要这个json包,而我平常解 析json习惯了用这个包,那么问题问题来了:
1. 用这个的时候,引入的包是org.json.JSONObject
2.用这个的时候,引入的包是net.sf.json.JSONObject
所以找了以下的方法来解决此问题:
二、net.sf.json.JSONObject 和org.json.JSONObject 的差别:
1.创建json对象
String str="{\"words_result\":{\"性别\":{\"words\":\"男\",\"location\":{\"height\":47,\"width\":39,\"left\":327,\"top\":415}},\"姓名\":{\"words\":\"陈晔\",\"location\":{\"height\":58,\"width\":182,\"left\":327,\"top\":295}},\"住址\":{\"words\":\"甘肃省天水市\",\"location\":{\"height\":123,\"width\":546,\"left\":330,\"top\":626}},\"公民身份号码\":{\"words\":\"620523199701148098\",\"location\":{\"height\":51,\"width\":731,\"left\":548,\"top\":903}},\"出生\":{\"words\":\"19970114\",\"location\":{\"height\":51,\"width\":432,\"left\":330,\"top\":512}},\"民族\":{\"words\":\"汉\",\"location\":{\"height\":45,\"width\":36,\"left\":604,\"top\":412}}},\"direction\":0,\"words_result_num\":6,\"image_status\":\"normal\",\"log_id\":83981779274812}";
2.当引入org.json.JSONObject:
JSONObject json = new JSONObject(str);
net.sf.json.JSONObject:
JSONObject json = JSONObject.fromObject(str);
net.sf.json.jsonobject 没有 new JSONObject(String)的构造方法
3.一个测试案例
package com.yinxin.server;import org.json.JSONObject;public class Test {public static void main(String[] args) {//引用import org.json.JSONObject 来完成的json解析//一层一层往下解析String idCardFront="{\"words_result\":{\"性别\":{\"words\":\"男\",\"location\":{\"height\":47,\"width\":39,\"left\":327,\"top\":415}},\"姓名\":{\"words\":\"石头\",\"location\":{\"height\":58,\"width\":182,\"left\":327,\"top\":295}},\"住址\":{\"words\":\"甘肃省挂就是给对方卡咖啡店\",\"location\":{\"height\":123,\"width\":546,\"left\":330,\"top\":626}},\"公民身份号码\":{\"words\":\"62052334645747540\",\"location\":{\"height\":51,\"width\":731,\"left\":548,\"top\":903}},\"出生\":{\"words\":\"19950913\",\"location\":{\"height\":51,\"width\":432,\"left\":330,\"top\":512}},\"民族\":{\"words\":\"汉\",\"location\":{\"height\":45,\"width\":36,\"left\":604,\"top\":412}}},\"direction\":0,\"words_result_num\":6,\"image_status\":\"normal\",\"log_id\":8398123423274812}";JSONObject jsonStr = new JSONObject(idCardFront);JSONObject msgObj = jsonStr.getJSONObject("words_result");JSONObject sex=msgObj.getJSONObject("性别");String words=sex.getString("words");System.out.println("msgObj格式下:["+msgObj+"]\n\ns e x 格式下:["+sex+"]\n\nwords 格式下:["+words+"]");}}
效果图:
效果图返回的json字符串:
msgObj格式下:[{"性别":{"words":"男","location":{"height":47,"width":39,"left":327,"top":415}},"姓名":{"words":"石头","location":{"height":58,"width":182,"left":327,"top":295}},"住址":{"words":"甘肃省挂就是给对方卡咖啡店","location":{"height":123,"width":546,"left":330,"top":626}},"出生":{"words":"19950913","location":{"height":51,"width":432,"left":330,"top":512}},"公民身份号码":{"words":"62052334645747540","location":{"height":51,"width":731,"left":548,"top":903}},"民族":{"words":"汉","location":{"height":45,"width":36,"left":604,"top":412}}}]s e x 格式下:[{"words":"男","location":{"height":47,"width":39,"left":327,"top":415}}]words 格式下:[男]
注:这个是引用 org.json.JSONObject写的一个小demo,引用另外一个,因为平常用就不再举例了,想测试一下的话,可以 自己试一下
三、解析json
1.第一种直接用json对象.getXXX();方法获取
net.sf.json.JSONObject: 没有严格要求获取字段的类型跟getXXX()的类型一样
org.json.JSONObject:获取的字段类型必须跟getXXX()的类型一样
例如:
String str = "{\"code\":\"0000\", \"msg\":{\"balance\":\"31503079.02\"}}";
JSONObject msgObj = json.getJSONObject("msg");
String availableBalance = msgObj.getString("balance");
如果在org.json.JSONObject 就会报错,可以msgObj.getDouble("balance");也不会丢精度;而net.sf.json.JSONObject正确,但是精度会丢失;
2.第二个json对象直接转变实体对象
public class BalanceDto {
private String availableBalance;
public String getAvailableBalance() {
return availableBalance;
}
public void setAvailableBalance(String balance) {
this.balance = balance;
}
public String toString(){
return "balance"+balance;
}
}
org.json.JSONObject:
BalanceDto alanceDto = (BalanceDto) JSONObject.stringToValue(msgObj);
这个句话编译通过,但是运行会报错,原因是BalanceDto 类中balance 的类型跟json中的“balance ”类型不同意
net.sf.json.JSONObject:
String msg = json.getString("msg");
BalanceDto alanceDto = (BalanceDto) JSONObject.toBean(
msg, new BalanceDto().getClass());
四、从json中获取数组
JSONArray subArray = json.getJSONArray("msg");
net.sf.json.JSONObject:
int leng = subArray.size();
org.json.JSONObject:
int leng = subArray.length();
java中关于引用net.sf.json.JSONObject 和org.json.JSONObject 的差别相关推荐
- [转载] Java中如何引用另一个类里的集合_Java工程师面试题整理
参考链接: 在Java中将预定义的类名用作类或变量名 花了一星期把学过的都整理一遍 尽量易懂,从基础到框架 最新版大厂面经汇总出炉,持续更新中 汇总完了上传网盘,设计到后端架构师的一切知识 如果没更新 ...
- java中是引用传递还是值传递....
刚才与Z师兄聊天,他提问: 你说java中是引用传递还是值传递啊? 当时俺搞混了这个"传递"的意思, 本来以为是对象的实例化比如: abc a=new abc(); 这个a 是引用 ...
- java虚引用作用_深入理解Java中的引用(二)——强软弱虚引用
深入理解Java中的引用(二)--强软弱虚引用 在上一篇文章中介绍了Java的Reference类,本篇文章介绍他的四个子类:强引用.软引用.弱引用.虚引用. 强引用(StrongReference) ...
- java 指针 引用_C++中的指针和引用与Java中的引用区别
C++的指针和Java中的引用比较像,在作为函数参数传递时,都可以在函数内部改变 "外部" 的值 C++的引用使用时必须是初始化的,他是一段内存的别名,因此也可以在函数内部改变&q ...
- 请注意,java中没有引用传递
今天在论坛上有人提了一个关于java中调用函数时有没有引用传递的问题,可谓是吵的不可开交.有人说java只有值传递,也有人说java既有值传递也有引用传递,那么java中到底有没有引用传递呢,下面我来 ...
- Java中 方法引用、Stream流、及方法实例 D190401
Java中 方法引用.Stream流.及方法实例 D190401 01.第三章:方法引用_什么是方法引用 1).什么是"方法引用":指引用现有的方法代替Lambda表达式--当我们 ...
- java byreference_深入理解Java中的引用(一)——Reference
深入理解Java中的引用(一)--Reference 本系列文章首先会介绍Reference类,为之后介绍的强引用.软引用.弱引用和虚引用打下基础. 最后会介绍虚引用在DirectBuffer回收中的 ...
- 类和对象系列教材 (一)- 什么是Java中的引用?
类和对象系列教材 (一)- 什么是Java中的引用? 更多详细内容请点击这里,注册获取 引用的概念,如果一个变量的类型是 类类型,而非基本类型,那么该变量又叫做引用. 步骤1:引用和指向 步骤2:多个 ...
- JAVA中的引用四种引用类型
关于值类型和引用类型的话题,C++.JAVA.python.go.C#等等高级语言都有相关的概念,只要理解了其底层工作原理,可以说即使是不同的语言,在面试学习工作实践中都可以信手拈来(不要太纠集语言) ...
最新文章
- Singleton Pattern
- highgui java opencv_java – OpenCV 3.0.0 JAR缺少HighGUI
- Junit5新功能一览
- 访问自己的网站有病毒提示,为什么?
- View的滚动原理简单解析(二)
- java与python结合使用_Java与Python使用grpc跨平台调用
- 抖音视频怎么下载MP4格式怎么转换为MP3
- 超详细! 利用Synopsys VCS对Verilog代码加密的四种方法
- 6.Alarm 闹钟服务
- 马化腾和朱啸虎互怼之后,摩拜ofo合并可能性基本为零
- rdt不同版本(rdt1.0,rdt2.0,rdt2.1,rdt2.2,rdt3.0)协议的特点以及发送端接收端的FSM
- 【算法分析】回溯法解数独(九宫格)算法
- 用c语言实现图书信息管理系统
- ios wifi 定位_iOS开发Wifi 定位原理及iOS Wifi 列表获取
- python爬取大学生就业分析专科和本科的信息https://edu.jobui.com/major/(上)JSON的存储
- 《Python 深度学习》6.1.3 整合在一起:从原始文本到词嵌入
- 云服务器运维兼职,云服务器的维护工作主要有哪些?
- 链表结点定义---指针指向结点
- Linux——cut命令
- C语言:最大公约数。