JSON数据
一、JSON介绍
Android应用程序界面上的数据信息大部分都是通过网络请求从服务器上获取到的,获取到的数据类型常见的就是JSON。JSON是一种新的数据格式,这种格式的数据不可以直接显示到程序的界面上,需要将该数据解析为一个集合或对象的形式才可以显示到界面上。JSON的全称为JavaScript Obiect Notation,JSON表示一种轻量级的数据交互格式,它是基于JavaScript的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言,而且USON数据易于阅读和编写,同时也易于机器解析和生成,能够有效地提升网络的传输效率。
初学者可以使用JSON传输一个简单的数据,如String、Number、Boolean类型的数据,也可以传输一个数组或者一个复杂的Object对象。
JSOU数据有两种表示结构,对象结构和数组结构。
1.对象结构
对象结构的JSON数据以" { "开始,以" } "结束。中间部分由以“ , “分隔的键值对 ( key : value )构成最后一个键值对后边不用加" , "、键(keg)和值(value)之间以" : "分隔。
基本语法格式:
{"key1": value1,"key2": value2,"key3": value3,... ...
}
例:
{"city": "北京","street": "xiSanQi","number": 100096,"inWest":true
}
2.数组结构
数组结构的ISON数据以" [ "开始,以" ] "结束。中间部分由0个或多个以" , "分隔的对象(value)的列表组成。
基本语法格式:
[value1,value2,value3,... ...
]
例:
(1)
["abc",123,true,null
]
(2)
本数组结构JSON中含两个对象结构JSON
[{"name": "王欣","sex": "女"},{"name": "王梓","sex": "女"}
]
(3)
本数组结构JSON中含两个对象结构JSON,对象结构JSON中含一个数组结构JSON
[{"name": "王欣","sex": "女","hobby": ["篮球","音乐","足球"]},{"name": "王梓","sex": "女","hobby": ["电影","游泳","羽毛球"]}
]
二、JSON解析
假设有两条JSON数据,json1和json2
json1: { "name":"张三" , "age":27 , "married":true }
json2: [ { "name":"李四" , "age":25 } , { "name":"王五" , "age":20 } ]
1.使用JSONObject类与JSONArray类解析JSON数据
(1)使用JSONObject类解析对象结构JSON数据
使用方法 new JSONObject( " 字符串型JSON " ) 获取JSONObject对象,然后使用optXXX(String valueName)方法获取JSON所含值。
//根据字符串型的JSON信息获取JSONObject
JSONObject jsonObject=new JSONObject( "json1(字符串类型)" );
//获取内容值
String jsonName=jsonObject.optString("name");
int jsonAge=jsonObject.optInt("age");
boolean jsonMarried=jsonObject.optBoolean("married");
(2)使用JSONArray类解析数组结构JSON数据
使用方法 new JSONArray( " 字符串型JSON " ) 获取JSONArray对象,然后使用getJSONObject(int index)方法获取JSONObject对象,然后使用optXXX(String valueName)方法获取JSON所含值。
//根据字符串型的JSON信息获取JSONArray
JSONArray jsonArray=new JSONArray( "json2(字符串类型)" );
//获取数组结构JSON中所含的各个对象结构JSON
for (int i=0;i<jsonArray.length();i++){//获取当前指针的JSONObject jsonObject=jsonArray.getJSONArray(i);//获取内容值对象结构JSONString jsonName=jsonObject.optString("name");int jsonAge=jsonObject.optInt("age");
}
以上两个类在解析JSON数据时用到了optString()方法,optInt()方法,optBoolean()方法,这些方法在解析数据结构是安全的,如果对应的字段不存在,这些方法会有默认的返回值。
2.使用GSON库解析JSON数据
Google公司提供了一个Gson库用于解析JSON数据,使用前需将其添加到项目中。
使用Gson前要创建JOSN数据对应的实体类,实体类中的成员名称必须与JSON数据中key值一致。
例:
//自定义类
class Person{private String name;private int age;private boolean married;public String getName() {return name;}public int getAge() {return age;}public boolean getMarried() {return married;}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}public void setMarried(boolean married) {this.married = married;}
}
(1)解析对象结构JSON
创建Gson对象;然后使用Gson类.fromJSON()方法,创建自定义类Person对象。
//创建Gson对象
Gson gson=new Gson();
//使用Gson类.fromJSON()方法,创建自定义类Person对象
Person1 person1=gson.fromJSON( "json1(字符串类型)" , Person.class );
(2)解析数组结构JSON(其中包含对象结构JSON)
创建Gson对象;使用new TypeToken<List<自定义类>>(){}.getType() (类型代币)创建Type对象;然后使用Gson类.fromJSON()方法,创建自定义类的List集合(List<Person>)。
//创建Gson对象
Gson gson=new Gson();
//创建Type对象
Type listType=new TypeToken<List<Person>>(){}.getType();
//使用Gson类.fromJSON()方法,创建自定义类的List集合(List<Person>)
List<Person> list=gson.formJSON( "json2(字符串类型)" , listType );
三、获取JSONObject、JSONArray对象
1.文件中获取
可使用输入流与StringBuilder配合,依靠StringBuilder生成完整的字符串型JSON数据。
//创建文件输入流
InputStream inputStream=openFileInput(" ~ .json");
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
//创建字符串构建器
StringBuilder stringBuilder=new StringBuilder();
while (true){String tempStr=bufferedReader.readLine();if(tempStr!=null){stringBuilder.append(tempStr);}else {break;}
}
//字符串构建器创建字符串
String jsonString=stringBuilder.toString();//生成JSONObject或JSONArray对象
JSONObject jsonObject=new JSONObject(jsonString);
JSONArray jsonArray=new JSONArray(jsonString);
2.服务器返回数据中获取
多数服务器返回JSON数据
//Response(响应)为服务器返回
Response response;
//获取ResponseBody
ResponseBody responseBody=response.body();
String jsonString=responseBody.toString();
//生成JSONObject或JSONArray对象
JSONObject jsonObject=new JSONObject(jsonString);
JSONArray jsonArray=new JSONArray(jsonString);
四、创建JSON数据
1.创建 .json 文件
main -> [new] -> [ Folder ] -> [Assets Folder] -> main -> assets -> [new] -> [File] 文件后缀为.json
2.程序中创建 JSONObject / JSONArray
//创建JSONObject
JSONObject jsonObject=new JSONObject();
jsonObject.put("id","1");
jsonObject.put("name","王欣");//创建JSONArray
JSONArray jsonArray=new JSONArray();
jsonArray.put("王欣");
jsonArray.put("王梓");
相关文章:

JSON数据
一、JSON介绍 Android应用程序界面上的数据信息大部分都是通过网络请求从服务器上获取到的,获取到的数据类型常见的就是JSON。JSON是一种新的数据格式,这种格式的数据不可以直接显示到程序的界面上,需要将该数据解析为一个集合或对象的形式才…...

金融领域:怎么保持电力系统连续供应?
银行作为金融领域的关键机构,依赖于高度可靠的电力供应,以保持银行操作的连续性。在电力中断或电力质量问题的情况下,银行可能面临严重的风险,包括数据丢失、交易中断和客户满意度下降。 UPS监控系统在这一背景下变得至关重要&…...

批量重命名文件夹:用数字随机重命名法管理您的文件夹
在文件管理中,文件夹的命名是一项至关重要的任务。一个好的文件夹命名方案可以帮助我们更高效地组织和查找文件。然而,随着时间的推移,我们可能会遇到文件夹数量过多,难以管理和查找的问题。为了解决这个问题,我们可以…...

RPC与HTTP的关系
首选理清楚关系 RPC与HTTP是两个不同维度的东西 HTTP 协议(Hyper Text Transfer Protocol),又叫做超文本传输协议,是一种传输协议,平时通过浏览器浏览网页网页,用到的就是 HTTP 协议。 而 RPC࿰…...

OpenCV #以图搜图:感知哈希算法(Perceptual hash algorithm)的原理与实验
1. 介绍 感知哈希算法(Perceptual Hash Algorithm,简称pHash) 是哈希算法的一种,主要用来做相似图片的搜索工作。 2. 原理 感知哈希算法(pHash)首先将原图像缩小成一个固定大小的像素图像,然后…...
Android多张图片rotation旋转角度叠加/重叠堆放
Android多张图片rotation旋转角度叠加/重叠堆放 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"…...

HBuilderX 自定义语法提示
在开发实践中,会使用到各种第三方组件,比如Element UI,通常的做法是到官网中复制模板再在本地根据设计要求进行修改,或是从其它已经实现的组件中复制相似的内容。但每次复制粘贴确实比较麻烦。 在HBuilderx中可以设置代码块来创建…...

Leetcode—2562.找出数组的串联值【简单】
2023每日刷题(十四) Leetcode—2562.找出数组的串联值 实现代码 long long findTheArrayConcVal(int* nums, int numsSize){int left 0;int right numsSize - 1;long long sum 0;while(left < right) {if(left right) {sum nums[left];break;}…...
T0外部计数输入
/*----------------------------------------------- 内容:通过外部按键计数进入中断执行LED取反 ------------------------------------------------*/ #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的…...

分治法求解棋盘覆盖问题
分治法求解棋盘覆盖问题 如何应用分治法求解棋盘覆盖问题呢?分治的技巧在于如何划分棋盘,使划分后的子棋盘的大小相同,并且每个子棋盘均包含一个特殊方格,从而将原问题分解为规模较小的棋盘覆盖问题。 基本思路 棋盘覆盖问题是…...

爱写bug的小邓程序员个人博客
博客网址: http://www.006969.xyz 欢迎来到我的个人博客,这里主要分享我对于前后端相关技术的学习笔记、项目实战经验以及一些技术感悟。 在我的博客中,你将看到以下主要内容: 技术文章 我将会分享我在学习前后端技术过程中的一些感悟&am…...

selenium判断元素可点击、可见、可选
1、判断元素是否可以点击 判断元素是否可以点击,WebElement对象调用is_enabled() is_enabled()方法返回一个布尔值,若可点击返回:True。若不可点击则返回:False from selenium import webdriver import time from selenium.web…...

计算机网络重点概念整理-第六章 应用层【期末复习|考研复习】
计算机网络复习系列文章传送门: 第一章 计算机网络概述 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层 第七章 网络安全 计算机网络整理-简称&缩写 文章目录 前言六、应用层6.1 网络应用模型6.1.1 客户/服务器模式C/S模型6.1.2 P…...

html2pdf
页面布局时将需要保存在同一页pdf的dom元素用div包裹,并为该div添加class类名,例如.convertPDF,如果有多页创建多个.convertPDF这个div,再循环保存pdf即可 用到了html2canvas和JsPdf这两个插件,自行站内搜索安装 pdf页…...
css中页面元素隐藏
display:nonevisibility:hiddenopcity:0页面中不存在存在存在重排会不会不会重绘会会不一定自身绑定事件不触发不触发能触发transition不支持支持支持子元素可复原不能能不能被遮挡的元素可触发事件能能不能 其他: 1.设置height,width,margi…...

dp三步问题
三步问题 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 class Solution { public:int waysToStep(int n) {vector<int> dp(n1,1);if(n1) return 1;dp[1]1;dp[2]2;for(int i3; i<n1; i){dp[i] ((dp[i-1]dp[i-2])%1000000007dp[i-3])%100…...
结构体和联合体嵌套访问
在JSON项目中,使用了联合体和结构体之间的嵌套,但是在访问内部的联合体和结构体的时候出现了问题,这篇文章作为记录,也希望能帮助遇到相同问题的好伙伴。 struct lept_value {union {struct str{char *s;size_t len;};double n;}…...

Linux ———— 管理磁盘
(一)MBR硬盘与GPT硬盘 硬盘按分区表的格式可以分为MBR硬盘与GPT硬盘两种硬盘格式。 MBR 硬盘:使用的是旧的传统硬盘分区表格式,其硬盘分区表存储在MBR(Master Boot Record,主引导区记录)内。MBR位于…...

文字的编码
1 字符的编码方式 1.1 ASCII 是“American Standard Code for Information Interchange”的缩写,美国信息交换标准代码。电脑毕竟是西方人发明的,他们常用字母就 26 个,区分大小写、加上标点符号也没超过 127 个,每个字符用一个字…...

21.9 Python 使用Selenium库
Selenium是一个自动化测试框架,主要用于Web应用程序的自动化测试。它可以模拟用户在浏览器中的操作,如打开网页、点击链接、填写表单等,并且可以在代码中实现条件判断、异常处理等功能。Selenium最初是用于测试Web应用程序的,但也…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...