Android json功能解析

1. 简介

  JAVAScript Object Notation是一种轻量级的数据交换格式具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持)。
 JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。JSON作为数据是目前网络中主流的数据传输格式之一,应用十分广泛,说是使用率达到99%一点也不勉强。

1.1. JSON支持的数据类型

  JSON里面的数据是以一种键值对的方式存在 (“key”:“value”)中值的类型可以是下面数据类型中的任意一种:
(1)数字(整数或浮点数)
(2)逻辑值(true 或 false)
(3)字符串(在双引号中)
(4)数组(在方括号中)
(4)函数
(6)对象(在大括号中)
(7)null

1.2.JSON语法规则

  JSON的语法规则非常的简单,就是使用大括号’{}’,中括号’[]’,逗号’,’,冒号’:’,双引号’“”’。嵌套对象、数组、字符串、数字、布尔值或空值。

2. json文件

2.1. 新建json文件

  new-Folder-Assets Folder
在这里插入图片描述

2.1. 读取 json文件

  读取 json文件分为assets文件夹读取、raw文件夹读取

2.1.1. 读取json文件工具类

public class JsonHelper {/*** 读取assets中的文件*/public static String readAssetsFile(Context context, String path) {String result = "";try {// read file content from fileStringBuilder sb = new StringBuilder("");InputStreamReader reader = new InputStreamReader(context.getResources().getAssets().open(path));BufferedReader br = new BufferedReader(reader);String str;while ((str = br.readLine()) != null) {sb.append(str);}result = sb.toString();br.close();reader.close();} catch (IOException e) {e.printStackTrace();}return result;}/*** 读取raw中的文件*/public static String readRawFile(Context context, int resourceId) {StringBuilder builder = new StringBuilder();BufferedReader reader = new BufferedReader(new InputStreamReader(context.getResources().openRawResource(resourceId)));try {for (String line = reader.readLine(); line != null; line = reader.readLine()) {builder.append(line).append("\n");}} catch (Exception e) {throw new RuntimeException(e);}return builder.toString();}
}

2.2. 读取assts json文件

在这里插入图片描述

    /***assets获取json*/private void getAssetsJson() {String jsonStr = JsonHelper.readAssetsFile(this,"json/applyJson.json");Log.e("assets获取json:",jsonStr);}

2.2. 读取raw json文件

在这里插入图片描述

    /*** raw获取json*/private void getRawJson() {String jsonStr = JsonHelper.readRawFile(this, R.raw.video_list);Log.e("raw获取json:",jsonStr);}

3. 解析json字符串

3.1. 数据源

private void initData() {parseObjectStr = "{\"msg\":\"操作成功\",\"code\":0,\"name\":\"网格员测试账号6\"," +"\"photo\":\"\",\"sessionId\":\"52312e93-c0d5-4a27-9425-2202212e178f\"" +",\"dept\":{\"searchValue\":null,\"createBy\":null,\"createTime\":null," +"\"updateBy\":null,\"updateTime\":null,\"remark\":null,\"params\":{}," +"\"deptId\":13850,\"parentId\":9449,\"gridId\":13850,\"ancestors\":\"" +"0,100,8720,9448,9449\",\"deptName\":\"潍坊市-高密市-密水街道-东关社区居委会" +"-东关社区居委会网格一\",\"orderNum\":\"0\",\"leader\":null,\"phone\":null," +"\"email\":null,\"status\":\"0\",\"delFlag\":null,\"parentName\":" +"\"潍坊市-高密市-密水街道-东关社区居委会\",\"deptCode\":null,\"deptGrade\"" +":\"4\",\"deptType\":null,\"isCgorg\":\"1\",\"lng\":null,\"lat\":null," +"\"address\":null,\"location\":null,\"component\":null,\"goNum\":null," +"\"gridHcount\":null,\"gridArea\":null,\"provinceId\":null,\"cityId\":null," +"\"countyId\":null,\"streetId\":null,\"communityId\":null,\"gridLevel\":null}}".replaceAll("\\/", "/");parseArrayStr = ("{\"hy\":[{\"acc\":\"0536010000067\",\"pas\":\"888888\"," +"\"wgyzh\":\"CS6\",\"region\":\"3707\"}],\"ip\":\"218.59.142.38\"}").replaceAll("\\/", "/");}

3.2. 解析object

 /*** 解析Object*/private void parseObject() {try {JSONObject jsonObject = new JSONObject(parseObjectStr);if (Integer.parseInt(jsonObject.get("code").toString()) == 0) {String sessionId = jsonObject.getString("sessionId");Log.e(TAG, "=sessionId=" + sessionId);JSONObject dept = new JSONObject(jsonObject.getString("dept"));String deptName = dept.getString("deptName");Log.e(TAG, "=deptName=" + deptName);}} catch (JSONException e) {e.printStackTrace();}}

在这里插入图片描述

3.3. 解析array

/*** 解析Array*/private void parseArray() {try {JSONObject object = new JSONObject(parseArrayStr);String ip = object.getString("ip");JSONArray array = object.getJSONArray("hy");for (int i = 0; i < array.length(); i++) {JSONObject obj = (JSONObject) array.get(i);String wgname = obj.getString("wgyzh");Log.e(TAG, "=wgname=" + wgname);}} catch (JSONException e) {e.printStackTrace();}}

在这里插入图片描述

3.4. 封装object(一)

    /*** @return* @desc 封装Object*/private String getPackageObject1() {JSONObject jsonObject = new JSONObject();try {jsonObject.put("userName", "userName");jsonObject.put("deptName", "deptName");jsonObject.put("deptNickName", "deptNickName");jsonObject.put("deptId", "deptId");jsonObject.put("parentId", "parentId");Log.e(TAG, "=jsonObject=" + jsonObject.toString());return jsonObject.toString();} catch (JSONException e) {e.printStackTrace();}return "";}}

在这里插入图片描述

3.4. 封装object(二)

 /*** @return* @desc 封装Object*/private String getPackageObject2() {JSONObject jsonObject = new JSONObject();try {jsonObject.put("userName", "userName");jsonObject.put("deptName", "deptName");jsonObject.put("deptNickName", "deptNickName");jsonObject.put("deptId", "deptId");jsonObject.put("parentId", "parentId");JSONObject jsonObject2 = new JSONObject();jsonObject.put("fee", jsonObject2);jsonObject2.put("feeName", "费用名称");jsonObject2.put("feeValue", "费用值");Log.e(TAG, "=jsonObject=" + jsonObject.toString());return jsonObject.toString();} catch (JSONException e) {e.printStackTrace();}return "";}

在这里插入图片描述

3.5. 封装array

 /*** @return* @desc 封装Array*/private String getPackageArray() {JSONObject jsonObject = new JSONObject();try {JSONArray jsonArray = new JSONArray();jsonObject.put("feelist", jsonArray);for (int i = 0; i < 4; i++) {JSONObject jsonObject2 = new JSONObject();jsonObject2.put("feeName", "费用名称" + i);jsonObject2.put("feeValue", "费用值" + i);jsonArray.put(jsonObject2);}Log.e(TAG, "=jsonObject=" + jsonObject.toString());return jsonObject.toString();} catch (JSONException e) {e.printStackTrace();}return "";}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/237457.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

路由器02_静态路由DHCP

一、静态路由 &#xff11;、静态路由特点 由管理员手工配置&#xff0c;是单向的&#xff0c;缺乏灵活性 &#xff12;、默认路由 默认路由是一种比较特殊静态路由&#xff0c;一般用于末节&#xff08;末梢&#xff09;网络&#xff0c;直接指定目标为任何地方 二、静态…

nodejs+vue+ElementUi音乐分享社交网站77l8j

本文介绍的系统主要分为两个部分&#xff1a;一是前台界面&#xff1a;用户通过注册登录可以实现音乐播放、新闻浏览、留言评论等功能&#xff1b;另一个是后台界面&#xff1a;音乐网站管理员对用户信息进行管理&#xff0c;上传更新音乐资源&#xff0c;发布最新音乐资讯等功…

Casper Network (CSPR)2024 年愿景:通过投资促进增长

Casper Network (CSPR&#xff09;是行业领先的 Layer-1 区块链网络之一&#xff0c;通过推出了一系列值得关注的技术改进和倡议&#xff0c;已经为 2024 年做好了准备。 在过去的一年里&#xff0c;Casper Network (CSPR&#xff09;不断取得里程碑式的进展&#xff0c;例如推…

高性能RPC框架解密

专栏集锦&#xff0c;大佬们可以收藏以备不时之需&#xff1a; Spring Cloud 专栏&#xff1a;http://t.csdnimg.cn/WDmJ9 Python 专栏&#xff1a;http://t.csdnimg.cn/hMwPR Redis 专栏&#xff1a;http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏&#xff1a;http://t.csdni…

linux安装系统遇到的问题

这两天打算攻克下来网络编程&#xff0c;发现这也确实是很重要的一个东西&#xff0c;但我就奇了怪了&#xff0c;老师就压根没提&#xff0c;反正留在我印象的就一个tcp/ip七层网络。也说正好&#xff0c;把linux命令也熟悉熟悉&#xff0c;拿着我大一课本快速过过 连接cento…

一个简易的PHP论坛系统

一个简易的PHP论坛系统 php课程设计&#xff0c;毕业设计 预览 技术 bootstrap 4.x jquery css php mysql 5.7 目录结构 登录 管理员 admin/123456 测试用户 user1/123456 更多文章和源码获取查看

【Java SE语法篇】8.面向对象三大特征——封装、继承和多态

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ 文章目录 1. 封装1.1 封装的概念1.2 为什么封装1.3 封装的实现…

PingCAP 受邀参加 FICC 2023,获 Open100 世纪全球开源贡献奖

2023 年 12 月&#xff0c;2023 国际测试委员会智能计算与芯片联邦大会&#xff08;FICC 2023&#xff09;在海南三亚举办&#xff0c;中外院士和数十位领域专家莅临出席。 大会现场 &#xff0c;开放源代码促进会创始人 Bruce Perens 颁发了 Open100 世纪全球开源贡献奖&…

C#,入门教程(17)——条件语句(if-else)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(16)——可变数据类型&#xff08;var&#xff09;的基础知识与使用禁忌https://blog.csdn.net/beijinghorn/article/details/124032216 程序的核心是逻辑。 逻辑的核心是布尔条件表达式。 逻辑的主要体现形式之一是 if-else 语句…

鸿蒙开发已解决-arkts编译报错-arkts-limited-stdlib错误

文章目录 项目场景:问题描述原因分析:解决方案:适配指导案例此Bug解决方案总结项目场景: arkts编译报错-arkts-limited-stdlib错误。 我用Deveco studio4.0 beta2开发应用,报arkts-limited-stdlib错误 报错内容为: ERROR: ArKTS:ERROR File: D:/prRevivw/3792lapplica…

在线的货币兑换平台源码下载

在线的货币兑换平台&#xff0c;可帮助全球各地的个人和企业将货币从一种货币兑换为另一种货币。该货币兑换平台是 Codecanyon 中最先进的脚本。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88728084

【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】

前言 大家好吖&#xff0c;欢迎来到 YY 滴C考前速过系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《…

Center审计策略表安装和策略添加(事务)——(Linux/Windows版本)

本博客主要讲述Center的审计策略表安装和策略添加 使用事务添加 1、开启事务 my->StartTransaction(); 2、编写sql语句 //清除原来数据&#xff0c;防止数据污染my->Query("DROP TABLE IF EXISTS t_strategy");string sql "CREATE TABLE t_strategy (…

stm32学习笔记:DMA

每个DMA通道硬件触发源是不一样的&#xff0c;要使用某个外设的硬件触发源&#xff0c;就必须使用它连接的那个通道 12个独立可配置的通道&#xff1a;DMA1(7个通道)&#xff0c;DMA2(5个通道) 每个通道都支持软件触发和特定的硬件触发 C8T6 DMA资源&#xff1a;DMA1 &#xff…

Sqoop与其他数据采集工具的比较分析

比较Sqoop与其他数据采集工具是一个重要的话题&#xff0c;因为不同的工具在不同的情况下可能更适合。在本博客文章中&#xff0c;将深入比较Sqoop与其他数据采集工具&#xff0c;提供详细的示例代码和全面的内容&#xff0c;以帮助大家更好地了解它们之间的差异和优劣势。 Sq…

定时器问题(vue的问题)

我在a页面写一个定时&#xff0c;让他每秒钟打印一个1&#xff0c;然后跳转到b页面&#xff0c;此时可以看到&#xff0c;定时器依然在执行。这样是非常消耗性能的。如下图所示&#xff1a; 解决方法1 首先我在data函数里面进行定义定时器名称&#xff1a; data() {return {t…

Python中使用execfile实现R中的source功能,避免重复加载包导入函数

R中避免重复 在R中要加载多个包&#xff0c;进行全局的配置&#xff0c;定义全局变量&#xff0c;我们可以下一个config.R文件&#xff0c;在分析的代码开头source一下这个config.R文件即可避免每次都要加载包的冗余代码 using是之前定义的一个函数&#xff0c;作用是一次性加…

基于MAP算法的Turbo译码 -- 公式推导

到此为止&#xff0c;讲完了turbo译码器的子译码器基于MAP算法的译码过程。但在实际使用中&#xff0c;很少直接使用MAP算法进行译码。而是使用改进的LOG-MAP和MAX-LOG-MAP算法进行译码&#xff0c;因此译码的整体流程&#xff0c;包括外信息的计算以及先验信息的获取等。都在后…

canvas设置圆锥形渐变

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…