java如何实现抽取json文件指定字段值

 更新时间:2022年06月16日 09:04:38   作者:偷偷写博客567  
这篇文章主要介绍了java如何实现抽取json文件指定字段值,具有很好的参考价值,希望对大家有所帮助。

使用场景

我有一个5000条数据的json文件,每条数据包含地名、该地的经纬度等其他很多信息。现在想把地名和经纬度抽出来导入到数据库中。

navicat自带的导入json格式文件不好用,只能导入json文件中的外层数据,而我需要的地名和经纬度信息在json的内层。

抽取json指定字段值

json文件格式

{
	"type": "FeatureCollection",
	"features": [{
			"type": "Feature",
			"geometry": {
				"type": "Point",
				"coordinates": [117.135437, 39.22393]
			},
			"properties": {
				"type": 1,
				"OBJECTID": 9288,
				"CC": "1117",
				"GB": "310107",
				"NAME": "某某村",
				"PAC": "120104008006111",
				"ELEMSTIME": "20150630",
				"ELEMETIME": "",
				"AREACODE": 120000,
				"FEATID": 120000403,
				"ChangeType": 0,
				"ChangeAtt": ""
			}
		},
		{
			"type": "Feature",
			"geometry": {
				"type": "Point",
				"coordinates": [117.17052343, 39.124663697000074]
			},
			"properties": {
				"OBJECTID": 9289,
				"CC": "1117",
				"GB": "310107",
				"NAME": "某某社区",
				"PAC": "120104003014111",
				"ELEMSTIME": "20150630",
				"ELEMETIME": "",
				"AREACODE": 120000,
				"FEATID": 120000458,
				"ChangeType": 0,
				"ChangeAtt": ""
			}
		}
	]
}

导入依赖

在pom.xml文件里加上fastjson

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.9</version>
</dependency>

代码实现

读取本地json文件的方法

public static String readJsonFile(String fileName) {
    String jsonStr = "";
    try {
        File jsonFile = new File(fileName);
        FileReader fileReader = new FileReader(jsonFile);
        Reader reader = new InputStreamReader(new FileInputStream(jsonFile), "utf-8");
        int ch = 0;
        StringBuffer sb = new StringBuffer();
        while ((ch = reader.read()) != -1) {
            sb.append((char) ch);
        }
        fileReader.close();
        reader.close();
        jsonStr = sb.toString();
        return jsonStr;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

读取指定字段

先把json文件放在resourses下面(直接复制到resourses)

String path = ddem.class.getClassLoader().getResource("villagePoint.json").getPath();
String s = readJsonFile(path);
JSONObject jobj = JSON.parseObject(s);
JSONArray features = jobj.getJSONArray("features");//构建JSONArray数组
for (int i = 0; i < features.size(); i++) {
    JSONObject key = (JSONObject) features.get(i);
    JSONObject geometry =key.getJSONObject("geometry");
    JSONArray coordinates=geometry.getJSONArray("coordinates");
    BigDecimal jingdu = coordinates.getBigDecimal(0);
    BigDecimal weidu = coordinates.getBigDecimal(1);
    JSONObject properties=key.getJSONObject("properties");
    String name =(String)properties.getString("NAME");
//          System.out.println(jingdu);
//          System.out.println(weidu);
    System.out.println(name);
}

JSONObject或JSONArray可以get很多种类型,具体用哪个看你自己的json内容

在这里插入图片描述

在这里插入图片描述

完整代码

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.io.*;
import java.math.BigDecimal;
public class ddem {
    public static void main(String[] args) {
        String path = ddem.class.getClassLoader().getResource("villagePoint.json").getPath();
        String s = readJsonFile(path);
        JSONObject jobj = JSON.parseObject(s);
        JSONArray features = jobj.getJSONArray("features");//构建JSONArray数组
        for (int i = 0; i < features.size(); i++) {
            JSONObject key = (JSONObject) features.get(i);
            JSONObject geometry =key.getJSONObject("geometry");
            JSONArray coordinates=geometry.getJSONArray("coordinates");
            BigDecimal jingdu = coordinates.getBigDecimal(0);
            BigDecimal weidu = coordinates.getBigDecimal(1);
            JSONObject properties=key.getJSONObject("properties");
            String name =(String)properties.getString("NAME");
//          System.out.println(jingdu);
//          System.out.println(weidu);
            System.out.println(name);
        }
    }
    //读取json文件
    public static String readJsonFile(String fileName) {
        String jsonStr = "";
        try {
            File jsonFile = new File(fileName);
            FileReader fileReader = new FileReader(jsonFile);
            Reader reader = new InputStreamReader(new FileInputStream(jsonFile), "utf-8");
            int ch = 0;
            StringBuffer sb = new StringBuffer();
            while ((ch = reader.read()) != -1) {
                sb.append((char) ch);
            }
            fileReader.close();
            reader.close();
            jsonStr = sb.toString();
            return jsonStr;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

把需要的数据整理到excel中

如上例所示,我需要地名和经纬度,可以一次性查出三列数据,但是为了复制到excel比较方便,我选择一个一个查出来,逐个复制到excel中,再为每列起个列名,就能非常方便地使用navicat的”导入xls“功能导入大量数据啦~

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java类的访问权限关键字用法说明

    Java类的访问权限关键字用法说明

    这篇文章主要介绍了Java类的访问权限关键字用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • java反射机制实战示例分享

    java反射机制实战示例分享

    这篇文章主要介绍了java反射机制实战示例,需要的朋友可以参考下
    2014-03-03
  • Java中Map集合的常用方法(非常详细!)

    Java中Map集合的常用方法(非常详细!)

    Java中的Map是一种键值对存储的数据结构,它提供了快速查找和访问数据的能力,下面这篇文章主要给大家介绍了关于Java中Map集合的常用方法,需要的朋友可以参考下
    2024-01-01
  • Map集合中获取key-value值的实现方法

    Map集合中获取key-value值的实现方法

    这篇文章主要介绍了Map集合中获取key-value值的实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Junit 5中@ParameterizedTest与@EnumSource结合使用

    Junit 5中@ParameterizedTest与@EnumSource结合使用

    今天小编就为大家分享一篇关于Junit 5中@ParameterizedTest与@EnumSource结合使用,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Java使用FileReader读取文件详解

    Java使用FileReader读取文件详解

    本文将为大家介绍FileReader类的基本用法,包括如何创建FileReader对象,如何读取文件,以及如何关闭流,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-09-09
  • MyBatis在Mapper中传递多个参数的四种方法详解

    MyBatis在Mapper中传递多个参数的四种方法详解

    这篇文章主要介绍了MyBatis在Mapper中传递多个参数的四种方法,文章通过代码示例介绍的非常详细,具有一定的参考价值,,需要的朋友可以参考下
    2023-09-09
  • SpringSecurity抛出异常但AccessDeniedHandler不生效的解决

    SpringSecurity抛出异常但AccessDeniedHandler不生效的解决

    本文主要介绍了SpringSecurity抛出异常但AccessDeniedHandler不生效的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • mybatis入门_动力节点Java学院整理

    mybatis入门_动力节点Java学院整理

    这篇文章主要为大家详细介绍了mybatis入门的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • 详解MyBatis-Puls中saveBatch批量添加慢的问题

    详解MyBatis-Puls中saveBatch批量添加慢的问题

    本文主要介绍了详解MyBatis-Puls中saveBatch批量添加慢的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01

最新评论