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 file
            StringBuilder 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 "";
    }

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python | 四、链表

为什么需要链表 在Python中&#xff0c;引入链表这一结构没有像C等语言那样有很多好处&#xff0c;因为Python里的列表和字符串结构已经十分灵活且大小可变&#xff0c;仍保留的好处如下&#xff1a; 列表、字符串等结构是连续存储的&#xff0c;因此如果有一块较小的内存区域…

QuEra 10,000个物理量子位和100个逻辑量子位的量子计算机2026

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

mongoose6.0版以上操作mongodb数据库的基本使用

1、介绍 Mongoose 是一个对象文档模型库&#xff0c;官网 http://www.mongoosejs.net/ 2、作用 方便使用代码操作 mongodb 数据库 3、使用流程 3.1、链接数据库 //1. 安装 mongoose---> npm install mongoose --save//2. 导入 mongoose const mongoose require(&quo…

网络安全B模块(笔记详解)- 网络渗透测试

LAND网络渗透测试 1.进入虚拟机操作系统:BT5中的/root目录,完善该目录下的land.py文件,填写该文件当中空缺的Flag1字符串,将该字符串作为Flag值(形式:Flag1字符串)提交;(land.py脚本功能见该任务第6题) 输入flag sendp(packet) Flag:sendp(packet) 2.进入虚拟机操作…

鸿蒙Harmony-PersistentStorage--持久化存储UI状态储详解

用简单的心境&#xff0c;对待复杂的人生&#xff0c;方能看淡得失&#xff0c;从容入世&#xff0c;潇洒自如&#xff0c;心变得简单了&#xff0c;世界也就简单了 目录 一&#xff0c;定义 二&#xff0c;限制条件 三&#xff0c;使用 一&#xff0c;定义 LocalStorage和App…

Open3D AABB包围盒计算与使用(19)

Open3D AABB包围盒计算与使用(19) 一、算法速览二、算法实现1.代码2.结果少年听雨歌楼上。红烛昏罗帐。壮年听雨客舟中。江阔云低、断雁叫西风。 而今听雨僧庐下。鬓已星星也。悲欢离合总无情。一任阶前、点滴到天明。 一、算法速览 AABB包围盒就是将点云用一个各条边沿着坐…

Android Studio 虚拟机 Unknown Error 解决

前言 尝试了网上很多解决方式&#xff0c;但很遗憾&#xff0c;都没效果&#xff1b; 于是我就想啊&#x1f914;&#xff0c;虚拟机属于SDK的一部分&#xff0c;那有没有一种可能&#xff0c;是SDK出了问题&#xff1b; 于是我就换了新的SDK&#xff0c;结果 ---- 完美解决…

halcon学习-blob分析统计木材个数

本文用到的主要算子简单介绍如下&#xff1a; 1、矩形结构开运算opening_rectangle1(); 2、圆形结构腐蚀运算erosion_circle(); 3、统计非连通区域个数count_obj(); 4、合并非连通区域concat_obj(); *读取图像 read_image(image,../wood.jpg) *图像转灰度 rgb1_to_gray(image,…

爬虫补环境jsdom、proxy、Selenium案例:某条

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、简介 爬虫逆向补环境的目的是为了模拟正常用户的行为&#xff0c;使爬虫看起来更像是一个真实的用户在浏览网站。这样可以…

《最新出炉》系列入门篇-Python+Playwright自动化测试-9-页面(page)

1.简介 通过前边的讲解和学习&#xff0c;细心认真地小伙伴或者童鞋们可能发现在Playwright中&#xff0c;没有Element这个概念&#xff0c;只有Page的概念&#xff0c;Page不仅仅指的是某个页面&#xff0c;例如页面间的跳转等&#xff0c;还包含了所有元素、事件的概念&#…

大数据仓库开发规范示例

大数据仓库开发规范示例 一、前提概要二、数仓分层原则及定义2.1 数仓分层原则2.2 数仓分层定义 三、数仓公共开发规范3.1 分层调用规范3.2 数据类型规范3.3 数据冗余规范3.4 NULL字段处理规范3.5 公共字段规范3.6 数据表处理规范3.7 事实表划分规范 四、数仓各层开发规范4.1 分…

Linux配置JAR包为服务实现自启动

一、实现bash脚本 1.1 绘图工具 绘图需安装idea的插件plantUML-Integration 只需要上图一个就可以&#xff0c;别的也不需要装。 启动服务的逻辑如下 关闭服务的逻辑如下 1.2 逻辑实现 在/root路径下创建entrance文件&#xff0c;实现逻辑如下 #!/usr/bin/env bash # 2>…

【120版本】最新谷歌浏览器驱动下载地址

在使用selenium时可能会遇到谷歌浏览器和谷歌驱动器版本不一致的问题&#xff0c;并且国内可以搜到的谷歌浏览器下载地址里面最新的驱动器只有114版本的&#xff0c;但目前谷歌浏览器最新版本是120。所以这里记录下最新版本120谷歌驱动器下载地址&#xff1a; Chrome for Test…

spark中Rdd依赖和SparkSQL介绍--学习笔记

1&#xff0c;RDD的依赖 1.1概念 rdd的特性之一 相邻rdd之间存在依赖关系&#xff08;因果关系&#xff09; 窄依赖 每个父RDD的一个Partition最多被子RDD的一个Partition所使用 父rdd和子rdd的分区是一对一&#xff08;多对一&#xff09; 触发窄依赖的算子 map()&…

强化学习应用(七):基于Q-learning的无人机物流路径规划研究(提供Python代码)

一、Q-learning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于马尔可夫决策过程&#xff08;MDP&#xff09;的问题。它通过学习一个价值函数来指导智能体在环境中做出决策&#xff0c;以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的…

【每日小bug】mybatis plus id注解错误导致的问题

插入数据 id不为自增 指定了主键&#xff0c;没有指定自增。会导致出现 修改如上 报错 Data truncation: Out of range value for column ‘id’ at row 1 数据库是bigint&#xff0c;java中是Integer。 修改如上

GCC工具源码编译

文章目录 背景一、下载源码二、编译前依赖准备2.1 相关工具依赖2.2 相关lib&#xff08;gmp/ mpfr /mpc&#xff09;依赖2.2.1 lib源码下载2.2.2 lib源码编译 三、编译GCC3.1 编译3.2 链接 四、报错处理 背景 日常可能涉及到系统里自带GCC版本与被编译源码存在不兼容&#xff…

1 - Spring 基本介绍

官网&#xff1a;https://spring.io/ Spring 是一个可以管理整合其他框架的框架 1. IOC 开发模式 程序不再负责对象的创建&#xff0c;而是直接使用ioc容器的对象来完成相关的业务逻辑 1.1 控制反转实现思想 1&#xff09;Spring 根据配置文件 xml/注解&#xff0c;创建对象…

AR HUD全面「上新」

AR HUD赛道正在迎来新的时代。 上周&#xff0c;蔚来ET9正式发布亮相&#xff0c;新车定位为D级行政旗舰轿车&#xff0c;其中&#xff0c;在智能座舱交互层面&#xff0c;继理想L系列、长安深蓝S7之后&#xff0c;也首次取消仪表盘&#xff0c;取而代之的是业内首个全焦段AR H…

9.5.1 函数模板特化

函数模板 有了泛化版本比较函数&#xff0c;我们可以比较两个整数&#xff0c;两个字符&#xff0c;两个指针 6~10行&#xff0c;是一个函数模板 13~16行&#xff0c;都可以得到正常结果 22行&#xff0c;得到的结果是&#xff0c;"A001" < "A000", …