java解析json数组方式
作者:阿懵 时间:2023-08-10 17:22:14
java解析json数组
最简单的json数组
[
{
"sisid": 2015111234,
"sitid": 20001
},
{
"sisid": 2015112312,
"sitid": 20003
}
]
其对应的内容为:
为什么我说这是最简单的json数组呢?因为这个json数组连json对象名都省略了。
如果加上对象名是这样的:
{
"msg": [
{
"sisid": 2015111234,
"sitid": 20001
},
{
"sisid": 2015112312,
"sitid": 20003
}
]
}
我看json数组结构是这样看的:最外面一层是一个方括号表示这是一个json数组,内部是连个花括号表示包含两个json对象(且注意到花括号外面没有对象名),且这两个对象分别是这个json数组的第0项和第1项。
如何解析这个json数组
//解析json数组
for (int i = 0; i < json.size(); i++) {
JsonObject signin = (JsonObject) json.get(i);
JsonElement int_sisid = signin.get("sisid");
JsonElement int_sitid = signin.get("sitid");
//获取sisid
String SISID = String.valueOf(int_sisid);
//获取sitid
String SITID = String.valueOf(int_sitid);
}
(注:我使用的是Gson的jar包)
for循环获取数组中个每个对象元素JsonObject,再通过get(“属性名”)获取这个对象中的所对应的元素JsonElement,最后转化为String类型。
java中JSON数据的读取和解析
在做springboot项目时用到了json文件读取和解析,所以在这里记录一下学习过程中总结的一些点,希望对大家有帮助~
配置fastJson
构建工具类(方便多次调用时重复使用)
public static JSONObject readJsonFile(String filename){
String jsonString = "";
File jsonFile = new File(filename);
try {
FileReader fileReader = new FileReader(jsonFile);
Reader reader = new InputStreamReader(new FileInputStream(jsonFile),"utf-8");
int ch = 0;
StringBuffer stringBuffer = new StringBuffer();
while ((ch = reader.read()) != -1){
stringBuffer.append((char) ch);
}
fileReader.close();
reader.close();
jsonString = stringBuffer.toString();
} catch (FileNotFoundException e){
JSONObject notFoundJson = new JSONObject();
notFoundJson.put("code",Code.GET_ERR);
notFoundJson.put("msg","该地区GeoJson文件不存在!");
return notFoundJson;
} catch (IOException e) {
e.printStackTrace();
}
return JSONObject.parseObject(jsonString);
}
json文件示例(以geojson为例,数据结构比较复杂,只是层次比较多)
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"adcode": 110101,
"name": "东城区",
"center": [
116.418757,
39.917544
],
"centroid": [
116.416739,
39.912912
],
"childrenNum": 0,
"level": "district",
"acroutes": [
100000,
110000
],
"parent": {
"adcode": 110000
}
},
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[
116.387664,
39.960923
],
[
116.38948,
39.961038
],
[
116.389506,
39.963147
],
[
116.396959,
39.963204
]
]
]
]
}
}
]
}
调用工具类读取数据
String filePath = "文件路径";
// 读取json文件
JSONObject jsonObejct = readJsonFile(filePath);
读取json对象中的"features"字段内容,是数组类型的,采用以下方式:
// 方式一
JSONArray featureArray = JSON.parseArray(jsonObejct.get("features").toString());
// 方式二
JSONArray featureArray = jsonObejct.getJSONArray("features");
读取对象类型字段
// 方式一
JSONObject propertiesObject = JSONObject.parseObject(regionObject.getString("properties"));
// 方式二
JSONObject propertiesObject = jsonObejct.getJSONArray("features").getJSONObject(0).getJSONObject("properties");
读取字符串类型
// 方式一
String type = jsonObejct.get("type").toString();
// 方式二
String type = jsonObejct.getString("type");
读取整数类型
// 方式一
String type = jsonObejct.get("type").toString();
// 方式二
String type = jsonObejct.getString("type");
整体解析
String filePath = "文件地址/文件名.json";
JSONObject jsonObejct = ReadJsonUtils.readJsonFile(filePath);
// 方式一(很复杂,语句分开,但是结构清晰)
// 读取json文件的features字段,并转换为json数组
JSONArray featureArray = JSON.parseArray(jsonObejct.get("features").toString());
// 读取数组第一个元素,为地区对象
JSONObject regionObject = JSONObject.parseObject(featureArray.get(0).toString());
// 读取地区对象中的参数对象
JSONObject propertiesObject = JSONObject.parseObject(regionObject.getString("properties"));
// 读取参数对象的名称
String name = propertiesObject.getString("name");
// 读取参数对象的地区代码
int adcode = propertiesObject.getIntValue("adcode");
// 读取地区对象的几何对象
JSONObject geometryObject = JSONObject.parseObject(regionObject.get("geometry").toString());
// 读取几何字段中的坐标数组
JSONArray coordinates = JSONObject.parseArray(geometryObject.get("coordinates").toString());
// 读取几何对象中的类型名称
String type = geometryObject.getString("type");
// 方式二(无需每次重新转换类型,一行搞定)
String name = jsonObejct.getJSONArray("features").getJSONObject(0).getJSONObject("properties").getString("name");
String type = jsonObejct.getJSONArray("features").getJSONObject(0).getJSONObject("geometry").getString("type");
JSONArray coordinates = jsonObejct.getJSONArray("features").getJSONObject(0).getJSONObject("geometry").getJSONArray("coordinates");
来源:https://blog.csdn.net/mm1030533738/article/details/81154485
标签:java,json,数组
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
C# Winform实现捕获窗体最小化、最大化、关闭按钮事件的方法
2021-10-18 08:01:29
IDEA(jetbrain通用)使用教程图解
2023-04-15 04:05:49
![](https://img.aspxhome.com/file/2023/9/61389_0s.gif)
执行java请求时导致在脚本执行结束时JVM无法退出
2023-11-25 05:57:13
SpringBoot详细讲解静态资源导入的实现
2023-07-26 13:23:21
![](https://img.aspxhome.com/file/2023/8/57728_0s.png)
java 接口回调实例详解
2023-11-19 15:44:24
C#最简单的关闭子窗体更新父窗体的实现方法
2021-07-24 18:58:27
C#缓存之SqlCacheDependency用法实例总结
2023-04-14 10:31:37
C#静态构造函数用法实例分析
2022-03-18 10:32:34
springboot jpa 延迟加载问题的2种解决
2021-10-14 03:05:20
Java反射机制(Reflection)浅析
2023-04-17 14:35:56
Unity3D基于OnGUI实时显示FPS
2021-06-25 09:10:52
java 集合----Map、Collection
2022-11-09 03:39:01
Spring Boot2.x集成JPA快速开发的示例代码
2022-11-21 04:55:41
![](https://img.aspxhome.com/file/2023/2/129202_0s.png)
Android自定义View实现闪耀字体效果
2023-05-10 02:27:43
![](https://img.aspxhome.com/file/2023/8/138608_0s.jpg)
详解Java如何在CompletableFuture中实现日志记录
2022-03-21 17:11:01
Spring Cache和EhCache实现缓存管理方式
2023-01-17 01:44:40
![](https://img.aspxhome.com/file/2023/7/64927_0s.png)
Android手机卫士之设置密码对话框
2021-08-03 07:24:27
![](https://img.aspxhome.com/file/2023/2/100652_0s.jpg)
idea创建maven父子工程导致子工程无法导入父工程依赖
2021-09-17 09:34:08
![](https://img.aspxhome.com/file/2023/0/87140_0s.png)
Java取整与四舍五入
2021-07-25 01:07:32
Java实现把文件及文件夹压缩成zip
2022-03-30 05:28:45