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并发编程中的阻塞队列解析,阻塞队列BlockingQueue是一个支持两个附加操作的队列,这两个附加的操作是在队列为空时,获取元素的线程会等待队列变为非空,当队列满时,存储元素的线程会等待队列可用,需要的朋友可以参考下
    2023-08-08
  • Java实现TFIDF算法代码分享

    Java实现TFIDF算法代码分享

    这篇文章主要介绍了Java实现TFIDF算法代码分享,对算法进行了简单介绍,概念,原理,以及实现代码的分享,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Spring循环引用失败问题源码解析

    Spring循环引用失败问题源码解析

    这篇文章主要为大家介绍了Spring循环引用失败问题源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • IDEA配置tomcat服务器全过程

    IDEA配置tomcat服务器全过程

    这篇文章主要介绍了IDEA配置tomcat服务器全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 如何在Netty中注解使用Service或者Mapper

    如何在Netty中注解使用Service或者Mapper

    这篇文章主要介绍了如何在Netty中注解使用Service或者Mapper,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 详解Mybatis是如何解析配置文件的

    详解Mybatis是如何解析配置文件的

    这篇文章主要介绍了详解Mybatis是如何解析配置文件的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Java生成随机数之Random与ThreadLocalRandom性能比较详解

    Java生成随机数之Random与ThreadLocalRandom性能比较详解

    大家项目中如果有生成随机数的需求,我想大多都会选择使用Random来实现,它内部使用了CAS来实现。 实际上,JDK1.7之后,提供了另外一个生成随机数的类ThreadLocalRandom,那么他们二者之间的性能是怎么样的呢?本文就来详细说说
    2022-12-12
  • Servlet实现分页效果

    Servlet实现分页效果

    这篇文章主要为大家详细介绍了Servlet实现分页效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • java题解Leetcode 8字符串转换整数

    java题解Leetcode 8字符串转换整数

    这篇文章主要为大家介绍了java题解Leetcode 8字符串转换整数实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Servlet的线程安全问题

    Servlet的线程安全问题

    本文主要介绍了Servlet的线程安全问题,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02

最新评论