java解析JSON的方法汇总
java解析JSON有多种方法,最常用的有3种:JSON官方的解析、GSON(谷歌)、FastJson(阿里)。
GSON解析:
1.新建项目,引入jar文件(可在GitHub上下载:https://search.maven.org/artifact/com.google.code.gson/gson):
首先,在项目中新建文件夹lib,将jar文件复制到lib下:
其次,依次点击File->Project Structrue->Libraries->+->java->选择项目->ok->ok:
这样就引入了,查看左侧gson下可以展开了:
可直接和对象类型进行转换:
//创建Gson对象Gson gs=new Gson();//json和类对象直接相互转换//创建类对象Songs song=new Songs("Jay","七里香","七里香",6666);//将对象转为jsonString js=gs.toJson(song);System.out.println(js);//将json串转回对象String jss="{\"singer\":\"Jay\",\"Album\":\"七里香\",\"name\":\"七里香\",\"Views\":6666}";Songs newSong=gs.fromJson(jss,Songs.class);System.out.println(newSong.toString());//只获取json中每一项的值//{"singer":"Jay","Album":"七里香","name":"七里香","Views":6666,"haha":["hehe","houhou"]}HashMap hjs= gs.fromJson("{\"singer\":\"Jay\",\"Album\":\"七里香\",\"name\":\"七里香\",\"Views\":6666,\"haha\":[\"hehe\",\"houhou\"]}", HashMap.class);System.out.println(hjs.get("singer"));ArrayList as=(ArrayList)hjs.get("haha");System.out.println(as.get(1));List ss=(List)hjs.get("haha");System.out.println(ss.get(0));
其他方法暂不总结,具体可参考https://www.jianshu.com/p/558844c96fc1
FastJson解析:
也可与对象相互转换:
//FastJson:对象转JsonString s = JSON.toJSONString(song);System.out.println(s);//Json转对象 {"singer":"Jay","Album":"七里香","name":"七里香","Views":6666}Songs songs = JSON.parseObject("{\"singer\":\"Jay\",\"Album\":\"七里香\",\"name\":\"七里香\",\"Views\":6666}", Songs.class);System.out.println(songs.getName());//转换数组 ["我的地盘","园游会","搁浅"]List<String> strings = JSON.parseArray("[\"我的地盘\",\"园游会\",\"搁浅\"]", String.class);System.out.println(strings.get(0));
其他方法暂不总结,可参考https://blog.csdn.net/weixin_33782386/article/details/88015470
JSON官方的解析:
1.新建项目,引入jar文件(可在GitHub上下载:https://github.com/stleary/JSON-java):
可解析出各个key对应的值,包括数组,但不能直接转换成对象,需要手动创建:
//JSON官方解析
String json1="{\"id\":0,\"name\":\"JAVAEE-1703\",\"stus\":[{\"id\":1,\"name\":\"刘一\",\"age\":16}]}";
//1.获取json对象(可以是字符串、Map、Bean等方式构建)
JSONObject jso=new JSONObject(json1);
//获取值
int id=jso.getInt("id");
System.out.println("id:"+id);
//int idd=jso.optInt("id");
//System.out.println("idd:"+idd);
String name=jso.getString("name");
System.out.println("id:"+id+",name:"+name+',');
//获取数组
JSONArray ja=jso.getJSONArray("stus");//这里注意JSONArray中JSON是大写哦,阿里的也是大写,谷歌的是Json
//解析数组,获取值
for (int i=0;i<ja.length();i++){//该数组为json对象数组JSONObject js1=ja.getJSONObject(i);//获取值int id1=js1.getInt("id");String name1=js1.getString("name");int age1=js1.getInt("age");System.out.println("id1:"+id1+",name1:"+name1+",age1:"+age1);
}
其他方法参考:
1.JSON对象创建
1.1 JSON对象
类名 | 用途描述 |
---|---|
JSONObject |
从String 或者JSONTokener 构建键/值对 集合类对象(类比JAVA的Map), 并提供对象操作、序列化方法。
|
JSONArray |
从String 或者JSONTokener 构建有序列表对象(类比JAVA的List), 并提供对象操作、序列化方法。
|
类名 | 用途描述 |
---|---|
JSONTokener |
从Reader 、String 、InputStream 读取数据,辅助构建JSON核心对象
|
HTTPTokener |
继承JSONTokener,从Reader 、String 、InputStream 读取HTTP头,辅助构建JSON 核心对象
|
XMLTokener |
继承JSONTokener,从Reader 、String 、InputStream 读取XML文件,辅助构建JSON 核心对象
|
类名 | 用途描述 |
---|---|
JSONWriter | 用于以代码方式创建JSON对象 |
JSONStringer |
继承JSONWriter ,提供了JOSN对象转JSON文本的toString 方法
|
JSONPointer | 使用表达式匹配、操作JSON对象 |
类名 | 用途描述 |
---|---|
CDL | JSON与CDL之间的转换 |
HTTP | JSON与HTTP报文头之间的转换 |
Cookie | JSON与Cookie之间的转化 |
CookieList | JSON与Cookie之间的转化 |
XML | JSON与XML之间的转化 |
JSONML | JSON与JSONML之间的转化 |
1.2 JSON对象创建
构造方式 | 说明 |
---|---|
JSONObject() | 创建一个空的JSONObject,可以通过JSONObject提供的方法操作该对象 |
JSONObject(String source) | 使用String创建 |
JSONObject(String baseName, Locale locale) | 使用ResourceBundle创建 |
JSONObject(JSONObject jo, String[] names) | 从JSONObject中指定属性子集,生成新的JSONObject对象 |
JSONObject(JSONTokener x) | 借助JSONTokener,从InputStream、Reader、String中创建 |
JSONObject(Map<?, ?> m) | 使用Map创建 |
JSONObject(Object bean) | 使用Bean创建 |
JSONObject(Object object, String[] names) | 使用Bean并指定属性子集创建,注意保证需要的属性为public,详见常见问题 |
JSONObject.wrap(Object object)) | 使用static方法,自动根据传入的JAVA 对象类型创建JSONObject或者JSONArray |
构造方式 | 说明 |
---|---|
JSONArray() | 创建一个空的JSONArray,可以通过JSONArray提供的方法操作该对象 |
JSONArray(JSONTokener x) | 借助JSONTokener,从InputStream、Reader、String中创建 |
JSONArray(String source) | 使用String创建 |
JSONArray(Collection<?> collection) | 使用Collection创建 |
JSONArray(Object array) | 使用数组创建 |
JSONObject.wrap(Object object)) | 使用static方法,自动根据传入的JAVA 对象类型创建JSONObject或者JSONArray |
1.3 JSON对象操作
对象 | 方法 |
---|---|
JSONObject | accumulate、append、put、get、opt、remove、query、quote |
JSONArray | put、get、opt、remove、query、join |
@JSONPropertyIgnore、JSONPropertyName | 忽略属性、更改属性输出的key名称 |
2.构建JSON文本
方式 | 说明 |
---|---|
JSONObject、JSONArray |
构建核心对象后使用toString 、write 方法
|
JSONWriter、JSONStringer | 使用JSONWriter、JSONStringer创建JSON文本 |
参考文献:https://blog.csdn.net/chc2327439008/article/details/104051317
java解析JSON的方法汇总相关推荐
- java解析json的一种方法
package com.hanchao.web; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /************* ...
- java 解析json字符串
初学java,参考网上的博客,总结解析json的方法.参考地址: http://blog.csdn.net/walkcode/article/details/8606752 1.例子: { " ...
- 如何使用java解析json文件并将其写入数据库
JAVA解析JSON数据文件 在使用第三方的api文档时,会得到相应的JSON数据文件,那么我们怎样将JSON文件写入数据库从而测试数据呢?下面我将给大家做一个简单的展示. 一.什么是JSON JSO ...
- Java解析JSON出现双引号变成转义字符quot;解决办法
Java解析JSON出现双引号变成转义字符" 问题描述: 在接口中读取传过来的json数据,但是双引号都转义成了" 读取xml文件格式如下: {"message" ...
- java解析json数据_java解析JSON数据详解
JSON是目前最流行的轻量级数据交换语言(没有之一).尽管他是javaScript的一个子集.但由于其是独立与语言的文本格式,它几乎可以被所有编程语言所支持. 以下是对java语言中解析json数据的 ...
- java解析json数组
java解析json数组 import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; p ...
- Java解析JSON格式数据
Java解析JSON格式的数据主要用到两个类JSONObject和JSONArray,这两个类在json-lib-2.4-jdk15包中,在使用JSONObject时除了需要这个包外还需要相关的依赖包 ...
- Java解析JSON数据
Java解析JSON数据 1.什么是JSON? JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式. 它基于 ECMAScript (欧洲计 ...
- Java解析json字符串和json数组
Java解析json字符串和json数组 public static Map<String, String> getUploadTransactions(String json){Map& ...
- JAVA 解析JSON数据
JSON 是目前最流行的轻量级数据交换语言(没有之一).尽管他是javaScript的一个子集.但由于其是独立与语言的文本格式,它几乎可以被所有编程语言所支持. 以下是对java 语言中解析json数 ...
最新文章
- PYTHON编程导论群问题汇总(三)
- c语言和画图软件,大佬们,小菜鸟想问一问用vc编译器做简易画图软件
- 基本CSS选择器,复合选择器,后代选择器
- 数据库报错1046-No database selected
- 局域网打印机共享怎么设置?如何设置打印机共享?
- Comet:基于 HTTP 长连接的“服务器推”技术解析
- LeetCode 1718. 构建字典序最大的可行序列(贪心+回溯)
- Dubbo在互金行业的应用
- 太赞了,Intellij IDEA竟然把Java8的数据流问题这么完美的解决掉了!
- 谷粒商城:06. 前端开发基础知识
- matlab图像分割基于小波变换,图小波变换在图像分割中的应用研究
- 微信小程序 解决disableScroll无法禁止小程序下拉的问题和视频铺满全屏尺寸
- 软件测试整改报告,软件测试工作效率低的改进措施
- kindle mobi词典格式分析及代码实现
- 分享一个性价比极高的代理IP
- java应届生面试收集总结
- Pointnet++中tf_ops三个.so文件的生成
- 转:CWnd的函数,以后可以在这儿找了!
- TCP的三次握手和四次挥手
- 深入分析分布式系统中互斥性与幂等性问题