Java读取本地json文件
Posted 王陸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java读取本地json文件相关的知识,希望对你有一定的参考价值。
背景
之前一直在弄一个Java爬虫,将爬取的信息保存到了数据库中。但这毕竟是一个课程设计,在设计前端GUI,展示数据的时候最开始是直接通过select语句从数据库中查找的,但我担心交给老师后,老师还要配置JDBC的参数创建数据库插入表等一些繁琐操作,便想要保存到本地。昨晚看到同学从数据库中导出一个json文件,从json文件中读取信息,看过后觉得这不失为一个好办法,于是学习了一下,这里整理整理。
当然,后来我学到了一个叫derby的本地数据库使用derby比起这拐弯抹角的方法好点,感兴趣的可以移步到这篇文章Derby数据库的使用
开发环境
1 JDK1.8
2 IntelliJ IDEA
3 IDEA自带的Maven
json文件
{ "RECORDS": [ { "movieId": "1", "name": "肖申克的救赎 The Shawshank Redemption", "director": "弗兰克·德拉邦特", "scenarist": "弗兰克·德拉邦特 / 斯蒂芬·金", "actors": "蒂姆·罗宾斯 / 摩根·弗里曼 / 鲍勃·冈顿 / 威廉姆·赛德勒 / 克兰西·布朗 / 吉尔·贝罗斯 / 马克·罗斯顿 / 詹姆斯·惠特摩 / 杰弗里·德曼 / 拉里·布兰登伯格 / 尼尔·吉恩托利 / 布赖恩·利比 / 大卫·普罗瓦尔 / 约瑟夫·劳格诺 / 祖德·塞克利拉 / 保罗·麦克兰尼 / 芮妮·布莱恩 / 阿方索·弗里曼 / V·J·福斯特 / 弗兰克·梅德拉诺 / 马克·迈尔斯 / 尼尔·萨默斯 / 耐德·巴拉米 / 布赖恩·戴拉特 / 唐·麦克马纳斯", "type": "剧情 犯罪", "ratingNum": "9.7", "tags": "经典 励志 信念 自由 人性 人生 美国 剧情" }, { "movieId": "2", "name": "霸王别姬", "director": "陈凯歌", "scenarist": "芦苇 / 李碧华", "actors": "张国荣 / 张丰毅 / 巩俐 / 葛优 / 英达 / 蒋雯丽 / 吴大维 / 吕齐 / 雷汉 / 尹治 / 马明威 / 费振翔 / 智一桐 / 李春 / 赵海龙 / 李丹 / 童弟 / 沈慧芬 / 黄斐", "type": "剧情 爱情 同性", "ratingNum": "9.6", "tags": "经典 人性 文艺 爱情 人生 同志 剧情 文革" }, { "movieId": "3", "name": "阿甘正传 Forrest Gump", "director": "罗伯特·泽米吉斯", "scenarist": "艾瑞克·罗斯 / 温斯顿·格鲁姆", "actors": "汤姆·汉克斯 / 罗宾·怀特 / 加里·西尼斯 / 麦凯尔泰·威廉逊 / 莎莉·菲尔德 / 海利·乔·奥斯蒙 / 迈克尔·康纳·亨弗里斯 / 哈罗德·G·赫瑟姆 / 山姆·安德森 / 伊俄涅·M·特雷奇 / 彼得·道博森 / 希芳·法隆 / 伊丽莎白·汉克斯 / 汉娜·豪尔 / 克里斯托弗·琼斯 / 罗布·兰德里 / 杰森·麦克奎尔 / 桑尼·施罗耶 / 艾德·戴维斯 / 丹尼尔C.斯瑞派克 / 大卫·布里斯宾 / 德博拉·麦克蒂尔 / 艾尔·哈林顿 / 阿非莫·奥米拉 / 约翰·沃德斯塔德 / 迈克尔·伯吉斯 / 埃里克·安德伍德 / 拜伦·明斯 / 斯蒂芬·布吉格沃特 / 约翰·威廉·高尔特 / 希拉里·沙普兰 / 伊莎贝尔·罗斯 / 理查德·达历山德罗 / 迪克·史迪威 / 迈克尔-杰斯 / 杰弗里·布莱克 / 瓦妮莎·罗斯 / 迪克·卡维特 / 马拉·苏查雷特扎 / 乔·阿拉斯奇 / W·本森·泰瑞", "type": "剧情 爱情", "ratingNum": "9.5", "tags": "励志 经典 人生 美国 成长 信念 剧情 人性" } ] }
注意这里是将json文件放到resources文件下
pom依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>
读取JSON工具类
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.io.*; public class JsonTest { //读取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; } } public static void main(String[] args) { String path = JsonTest.class.getClassLoader().getResource("Movie.json").getPath(); String s = readJsonFile(path); JSONObject jobj = JSON.parseObject(s); JSONArray movies = jobj.getJSONArray("RECORDS");//构建JSONArray数组 for (int i = 0 ; i < movies.size();i++){ JSONObject key = (JSONObject)movies.get(i); String name = (String)key.get("name"); String director = (String)key.get("director"); String scenarist=((String)key.get("scenarist")); String actors=((String)key.get("actors")); String type=((String)key.get("type")); String ratingNum=((String)key.get("ratingNum")); String tags=((String)key.get("tags")); System.out.println(name); System.out.println(director); System.out.println(scenarist); System.out.println(actors); System.out.println(type); System.out.println(director); System.out.println(ratingNum); System.out.println(tags); } } }
以上是关于Java读取本地json文件的主要内容,如果未能解决你的问题,请参考以下文章