当前位置: 首页 > news >正文

JSON数据

一、JSON介绍

Android应用程序界面上的数据信息大部分都是通过网络请求从服务器上获取到的,获取到的数据类型常见的就是JSON。JSON是一种新的数据格式,这种格式的数据不可以直接显示到程序的界面上,需要将该数据解析为一个集合或对象的形式才可以显示到界面上。JSON的全称为JavaScript Obiect Notation,JSON表示一种轻量级的数据交互格式,它是基于JavaScript的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言,而且USON数据易于阅读和编写,同时也易于机器解析和生成,能够有效地提升网络的传输效率。
初学者可以使用JSON传输一个简单的数据,StringNumberBoolean类型的数据,也可以传输一个数组或者一个复杂的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应用程序界面上的数据信息大部分都是通过网络请求从服务器上获取到的&#xff0c;获取到的数据类型常见的就是JSON。JSON是一种新的数据格式&#xff0c;这种格式的数据不可以直接显示到程序的界面上&#xff0c;需要将该数据解析为一个集合或对象的形式才…...

金融领域:怎么保持电力系统连续供应?

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

批量重命名文件夹:用数字随机重命名法管理您的文件夹

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

RPC与HTTP的关系

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

OpenCV #以图搜图:感知哈希算法(Perceptual hash algorithm)的原理与实验

1. 介绍 感知哈希算法&#xff08;Perceptual Hash Algorithm&#xff0c;简称pHash&#xff09; 是哈希算法的一种&#xff0c;主要用来做相似图片的搜索工作。 2. 原理 感知哈希算法&#xff08;pHash&#xff09;首先将原图像缩小成一个固定大小的像素图像&#xff0c;然后…...

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 自定义语法提示

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

Leetcode—2562.找出数组的串联值【简单】

2023每日刷题&#xff08;十四&#xff09; 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外部计数输入

/*----------------------------------------------- 内容&#xff1a;通过外部按键计数进入中断执行LED取反 ------------------------------------------------*/ #include<reg52.h> //包含头文件&#xff0c;一般情况不需要改动&#xff0c;头文件包含特殊功能寄存器的…...

分治法求解棋盘覆盖问题

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

爱写bug的小邓程序员个人博客

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

selenium判断元素可点击、可见、可选

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

计算机网络重点概念整理-第六章 应用层【期末复习|考研复习】

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

html2pdf

页面布局时将需要保存在同一页pdf的dom元素用div包裹&#xff0c;并为该div添加class类名&#xff0c;例如.convertPDF&#xff0c;如果有多页创建多个.convertPDF这个div&#xff0c;再循环保存pdf即可 用到了html2canvas和JsPdf这两个插件&#xff0c;自行站内搜索安装 pdf页…...

css中页面元素隐藏

display:nonevisibility:hiddenopcity:0页面中不存在存在存在重排会不会不会重绘会会不一定自身绑定事件不触发不触发能触发transition不支持支持支持子元素可复原不能能不能被遮挡的元素可触发事件能能不能 其他&#xff1a; 1.设置height&#xff0c;width&#xff0c;margi…...

dp三步问题

三步问题 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 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项目中&#xff0c;使用了联合体和结构体之间的嵌套&#xff0c;但是在访问内部的联合体和结构体的时候出现了问题&#xff0c;这篇文章作为记录&#xff0c;也希望能帮助遇到相同问题的好伙伴。 struct lept_value {union {struct str{char *s;size_t len;};double n;}…...

Linux ———— 管理磁盘

&#xff08;一&#xff09;MBR硬盘与GPT硬盘 硬盘按分区表的格式可以分为MBR硬盘与GPT硬盘两种硬盘格式。 MBR 硬盘&#xff1a;使用的是旧的传统硬盘分区表格式&#xff0c;其硬盘分区表存储在MBR(Master Boot Record&#xff0c;主引导区记录&#xff09;内。MBR位于…...

文字的编码

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

21.9 Python 使用Selenium库

Selenium是一个自动化测试框架&#xff0c;主要用于Web应用程序的自动化测试。它可以模拟用户在浏览器中的操作&#xff0c;如打开网页、点击链接、填写表单等&#xff0c;并且可以在代码中实现条件判断、异常处理等功能。Selenium最初是用于测试Web应用程序的&#xff0c;但也…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...