广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java如何实现抽取json文件指定字段值
  • 295
分享到

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

2024-04-02 19:04:59 295人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录使用场景抽取JSON指定字段值json文件格式导入依赖代码实现完整代码把需要的数据整理到excel中使用场景 我有一个5000条数据的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“功能导入大量数据啦~

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: java如何实现抽取json文件指定字段值

本文链接: https://www.lsjlt.com/news/151642.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java如何实现抽取json文件指定字段值
    目录使用场景抽取json指定字段值json文件格式导入依赖代码实现完整代码把需要的数据整理到excel中使用场景 我有一个5000条数据的json文件,每条数据包含地名、该地的经纬度...
    99+
    2022-11-13
  • 批处理bat如何实现全盘搜索指定文件获取其完整路径
    小编给大家分享一下批处理bat如何实现全盘搜索指定文件获取其完整路径,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!想用的话,自己保存成bat文件即可。【方案一】f...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作