最近在开发中又开始加载一些本地的json数据源,回头看之前竟然没记录,赶紧记录一波 ~

  • 如何准备一个合格的json文件?
  • AndoridStudio中如何存放json文件?
  • 如何读取本地Json文件数据源?
    • Java 版本
    • Kotlin 版本

如何准备一个合格的json文件?

  1. 准备一个txt格式的json串,另存为(A)...

  1. 更改文件名后缀为json更改编码格式为 UTF-8 - 保存后你就获取到了一个合格的json文件了

题外话 - 此处可不看

因为我是加载本地的省市区数据(后台提供数据源),无聊的时候github看到个 address.json ,其实意义不大,就顺手记录一下


AndoridStudio中如何存放json文件?

  1. 新建一个 assets 文件夹,将我们生成的json文件放在其内即可
  2. 为了直观一点,奉上一张目录结构图

如何读取本地Json文件数据源?

在我写的Demo示例中,我用到的解析方式是FastJson,以前有写过一篇 Android进阶之路 - FastJson送给如我从前般的新手

我解析用到的Model类,有兴趣的可以看看,没兴趣跳过就好 - AddressResponse

package com.defense.myapplicationimport java.io.Serializable
import java.util.*data class AddressResponse(val child: List<Child>,val firstLetter: String,val level: Int,val name: String,val parentId: Int,val part: Int
) {data class Child(val child: List<ChildX>,val firstLetter: String,val id: Int,val level: Int,val name: String,val parentId: Int,val part: Int) {data class ChildX(val child: List<Any>,val firstLetter: String,val id: Int,val level: Int,val name: String,val parentId: Int,val part: Int)}
}
Java 版本
    public void readJson() {try {//InputStreamReader 将字节输入流转换为字符流//注意:address.json 是因人而异的InputStreamReader isr = new InputStreamReader(getAssets().open("address.json"), "UTF-8");//包装字符流,将字符流放入缓存里BufferedReader br = new BufferedReader(isr);String line;//StringBuilder和StringBuffer功能类似,存储字符串StringBuilder builder = new StringBuilder();while ((line = br.readLine()) != null) {//append 被选元素的结尾(仍然在内部)插入指定内容,缓存的内容依次存放到builder中builder.append(line);}br.close();isr.close();//builder.toString() 返回表示此序列中数据的字符串 (就是json串,后面自行解析就行)//这里我用的是fastJson,具体解析方式自行决定就好,数据格式也自行决定就好List<AddressResponse> addressResponses = JSON.parseArray(builder.toString(), AddressResponse.class);for (int i = 0; i < addressResponses.size(); i++) {AddressResponse addressResponse = addressResponses.get(i);System.out.println("-----------------");System.out.println("name= " + addressResponse.getName());List<AddressResponse.Child> child = addressResponse.getChild();for (int j = 0; j < child.size(); j++) {System.out.println("city name= " + child.get(j).getName());}}         } catch (IOException e) {e.printStackTrace();} catch (JSONException e) {e.printStackTrace();}}
Kotlin 版本
  1. 因为项目中使用,所以稍微优化一下,先检查 assets是否有对应的json文件
    public static String readAssetsFile(Context context, String fileName) {try {InputStream is = context.getAssets().open(fileName);int fileLength = is.available();byte[] buffer = new byte[fileLength];int readLength = is.read(buffer);is.close();return new String(buffer, "utf-8");} catch (IOException e) {e.printStackTrace();}return "读取错误,请检查文件是否存在";}
  1. 获取json文件后,直接解析到我们需要的数据源
    public static List<AddressResponse> getLocalAddress(String json) {List<AddressResponse> addressResponses = JSON.parseArray(json, AddressResponse.class);return addressResponses;}
  1. 调用方式
  lateinit var localAddressList: ArrayList<AddressResponse>localAddressList = getLocalAddress(readAssetsFile(this,"address.json")) as ArrayList<AddressResponse>

有的人可能感觉麻烦,我直接简单封在一起吧

未亲测 - 不过感觉没啥问题

  lateinit var localAddressList: ArrayList<AddressResponse>localAddressList = getLocalAddress(readAssetsFile(this,"address.json")) as ArrayList<AddressResponse>//判断文件+解析public static List<AddressResponse> readAssetsFile(Context context, String fileName) {try {InputStream is = context.getAssets().open(fileName);int fileLength = is.available();byte[] buffer = new byte[fileLength];int readLength = is.read(buffer);is.close();List<AddressResponse> addressResponses = JSON.parseArray(new String(buffer, "utf-8"), AddressResponse.class);return addressResponses;} catch (IOException e) {e.printStackTrace();}return "读取错误,请检查文件是否存在";}

Android进阶之路 - 存、取、读 本地 Json 文件相关推荐

  1. php读本地json文件内容,php读取本地json文件有哪些方法

    这次给大家带来php读取本地json文件有哪些方法,php读取本地json文件的注意事项有哪些,下面就是实战案例,一起来看一下. 1.data.json文件{ "goods":[ ...

  2. Android入门第9天-Android读本地JSON文件并显示

    Android在大都情况会取得后台Service返回的json数据来做前端展示.那么Android是如何处理json文件的呢?我们就一起跟着今天的教程一步步来实现吧. 目标 设本地有一个demo.js ...

  3. Android进阶之路 - 解决部分手机拍照之后图片被旋转的问题

    这几天犯了一个错误,初期想着甩锅给后台的- 但还好及时发现了是自身的问题~ 关联文章 Android基础进阶 - 调用拍照.获取图片(基础) Android基础进阶 - 获取.调用相册内图片(基础) ...

  4. Android进阶之路 - 批量下载、缓存图片、视频

    之前已经记录过,批量下载图片和缓存本地的方式,此篇主要记录批量下载图片.视频,同时缓存在本地的功能实现 关联篇 Android进阶之路 - 批量下载.缓存图片 Android进阶之路 - 批量下载.缓 ...

  5. Android进阶之路 - 批量下载、缓存图片

    在日常项目开发中,关于图片批量下载,数据缓存的相关功能比比皆是,这次也是去年在项目中需要在本地缓存商品数据,所以用到了批量下载的功能,特此记录 ~ 关联篇 Android进阶之路 - 批量下载.缓存图 ...

  6. Android进阶之路 - 软键盘中右下角的设置与监听

    在项目中,多多少少会遇到修改软键盘右下角按钮的需求,虽然已经写过几次,但是还是觉得在这里专心做个笔记比较放心 ~ 我的那些软键盘Blog ~ Android进阶之路 - 常见软键盘操作行为 Andro ...

  7. android mp3 lrc歌词文件utf-8歌词显示为乱码,Android读取本地json文件的方法(解决显示乱码问题)...

    本文实例讲述了Android读取本地json文件的方法.分享给大家供大家参考,具体如下: 1.读取本地JSON ,但是显示汉字乱码 public static String readLocalJson ...

  8. jquery ajax json文件,jQuery ajax读取本地json文件

    jQuery ajax读取本地json文件 json文件 { "first":[ {"name":"张三","sex": ...

  9. Jquery中使用JsonP加载本地json文件解决跨域问题

    场景 jquery中直接请求本地json文件时会提示跨域问题. Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获 ...

最新文章

  1. Ubuntu下ssh免password登录安装
  2. 目标检测|SSD原理与实现
  3. Percy Liang、李飞飞等百余位学者联名发布:「基础模型」的机遇与挑战
  4. Virtualbox虚机无法启动因断电
  5. java 安装报错2503_Windows安装Node.js报错:2503、2502的解决方法
  6. windows平台搭建Mongo数据库复制集(类似集群)(一)
  7. 学计算机随随便便上万,大学“最烧钱”专业排行榜,“家境一般”慎入,“土豪”请随意...
  8. 鸿蒙系统的平板电脑,亓纪的想法 篇三百六十三:骁龙870+鸿蒙2.0!首款鸿蒙系统平板曝光,支持第二代M-Pencil...
  9. Simbad的使用--检索、导入、保存
  10. 在linux系统如何获得窗口句柄,编写控制台程序,获得标准输入输出的窗口句柄...
  11. 百度云盘批量转存工具使用教程
  12. ssh遇到密钥更改问题
  13. 如何编制试算平衡表_试算平衡表的编制步骤是怎样的?
  14. GRPC: 如何优雅关闭进程(graceful shutdown)?
  15. 阿卜杜拉国王科技大学的计算机,阿卜杜拉国王科技大学(KAUST)探索奖学金项目...
  16. cl.3hh.win/index.php,windows 系统下 安装 gitblit 教程
  17. 台式计算机的cpu是指,台式电脑CPU是A10指的是什么?
  18. 网卡地址能查计算机位置吗,如何通过网卡地址查找到丢失的电脑
  19. jarsigner签名APK完整步骤
  20. 用Raphael在网页中画圆环进度条

热门文章

  1. 华为RH2285 服务器配置笔记
  2. android百度上弄一个蓝圈,iOS 百度地图 定位后蓝色圆圈(精度圈)去除
  3. 框架--SpringWeb
  4. 创建组groupadd_如何在Linux中创建组– groupadd命令
  5. ipv6 介绍,格式定义
  6. Android流量主,微信小程序和公众号流量主广告收入分成比例整体调优
  7. JSON数据转换总结(VIP典藏版)
  8. 三星s4i9500+android4.2.2基带,三星i9500/Galaxy S4 刷基带教程指引
  9. 巴菲特看好苹果的未来,然而库克似乎不太乐观选择抛售股份
  10. 前端笔试题总结(一) - JS篇