JSON数据

news2025/1/13 10:27:23

一、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);
    //获取内容值对象结构JSON
    String 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("王梓");

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux-安装docker-compose

前言&#xff1a;本文建立在服务器中已经存在docker环境的基础上&#xff0c;总结了安装docker-compose过程&#xff0c;以及安装过程中遇到的问题和解决方案。 一、下载docker-compose 在网上找了两种&#xff0c;一种是github官方的&#xff0c;一种是国内的镜像 gitbub官…

Python循环语句(二)

目录 二.for循环1.1for循环的基础语法1.2range语句1.3变量作用域2.for循环嵌套3.循环中断 二.for循环 1.1for循环的基础语法 while循环和for循环的区别 while循环的循环条件是自定义的&#xff0c;自行控制循环条件 for循环是一种轮询机制&#xff0c;是对一批内容进行逐个处…

多种方式计算当天与另一天的间隔天数 Java实现

这里不会记录纯原生写法&#xff0c;因为现在基本都是被工具类封装好的&#xff0c;所以会记录好用的工具类来简化开发&#xff0c;当然自己可以研究写一个年月日各自做减法的纯原生工具类。 踩坑处(System.currentTimeMillis) 这里指的是使用System.currentTimeMillis()方法。…

基于 Qt控制开发板 LED和C语言控制LED渐变亮度效果

## 资源简介 在STM32开发板,板载资源上有两个可自由控制的 LED。如下图原理 图其中我们以操作 LED1 为示例,LED1 为出厂系统的心跳指示灯。 ## 应用实例 想要控制这个 LED,首先出厂内核已经默认将这个 LED 注册成了 gpio-leds类型设备。所以我们可以直接在应用层接口直接…

如何通过内网穿透实现公网远程连接Redis数据库

公网远程连接Redis数据库【内网穿透】 文章目录 公网远程连接Redis数据库【内网穿透】前言1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址…

国内主要的ERP软件有哪几种?谁家的ERP软件好用

不同的企业有不同的管理方式和侧重点&#xff0c;随着市场环境的变化&#xff0c;各行业竞争日趋激烈化&#xff0c;如何降低经营成本&#xff0c;提升产品质量&#xff0c;优化资源配置也成为各个企业努力的重点。 有些企业存在部门之间信息传递不及时、多组织协同效率低、不…

Java API访问HDFS

一、下载IDEA 下载地址&#xff1a;https://www.jetbrains.com/idea/download/?sectionwindows#sectionwindows 拉到下面使用免费的IC版本即可。 运行下载下来的exe文件&#xff0c;注意安装路径最好不要安装到C盘&#xff0c;可以改成其他盘&#xff0c;其他选项按需勾选即可…

2023年软件测试还能不能干,怎么干!听听这些肺腑之言!

“怎么办&#xff1f;我似乎连面试都过不了。” 小玲边喝着陪伴她度过无数熬夜的奶茶&#xff0c;边与朋友分享着自己在软件测试行业的求职之路。 被公司裁员后&#xff0c;小玲虽然通过自学掌握了一些基本的接口自动化和UI自动化测试技能&#xff0c;但面试时总还是遭遇到一些…

英伟达携手联发科打造CPU,威胁英特尔主导地位 | 百能云芯

据路透社报道&#xff0c;英伟达&#xff08;NVIDIA&#xff09;计划采用安谋&#xff08;Arm&#xff09;架构设计中央处理器&#xff08;CPU&#xff09;&#xff0c;进军个人电脑&#xff08;PC&#xff09;市场。外界已指出&#xff0c;联发科是英伟达的合作伙伴&#xff0…

利用Nginx通过内网穿透实现Windows Web多站点远程访问

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…

Redis常用知识笔记(超全面!超详细!)收藏这一篇就够了

这里写目录标题 一、Key二、常见的数据类型1、string (字符串&#xff09;1-1 常见命令1-2 案例 2、List&#xff08;列表&#xff09;2-1 常见命令2-2 案例 3、Hash&#xff08;哈希&#xff09;3-1 常见命令3-2 案例 4、Set&#xff08;集合&#xff09;元素唯一不重复4-1 常…

msigdbr hallmarks gsea broad研究所

使用msigdbr r包 #BiocManager::install("msigdb") #https://www.gsea-msigdb.org/gsea/msigdb #https://cran.r-project.org/web/packages/msigdbr/vignettes/msigdbr-intro.html #https://bioconductor.org/packages/release/data/experiment/vignettes/msigdb/ins…

vue3 setup语法糖 搜索

目录 前言 用法 1. 区域 前言 Vue.js 是一款流行的 JavaScript 框架&#xff0c;用于构建用户界面。它提供了一种简洁的方式来创建可维护和可测试的前端应用程序。Vue.js 的核心库只关注视图层&#xff0c;易于上手&#xff0c;同时与其他库或现有项目整合也非常方便。Vue…

解决Maven打包Nacos时插件报错

Maven打包指令&#xff1a;mvn clean install -Dmaven.test.skiptrue -Dcheckstyle.skiptrue 在执行时报错&#xff0c;报错信息如下&#xff1a; Failed to execute goal org.xolstice.maven.plugins:protobuf-maven-plugin:0.6.1:compile (default) on project nacos-consist…

C语言——有一篇文章,共有 3 行文字,每行有 80 个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数

完整代码&#xff1a; /* 有一篇文章&#xff0c;共有 3 行文字&#xff0c;每行有 80 个字符。要求分别统计出其中英文大写字母、 小写字母、数字、空格以及其他字符的个数*/#include<stdio.h> int main(){//创建一篇这样的文章到二维字符数组中char str[3][80] {&quo…

平面图欧拉公式

V − E P B 1 V-EPB1 V−EPB1 V V V &#xff1a;点数 E E E&#xff1a;边数 P P P&#xff1a;面数&#xff08;含外面&#xff09; B B B&#xff1a;连通块数量 通过这个我们可以处理网格图中的连通块数量问题 上图中有7个点&#xff0c;8条边&#xff0c;3个面&#x…

小红书推广高客单产品的技巧与方法

小红书作为流量市场的一块洼地&#xff0c;这里汇聚着高净值高月活的年轻女性用户&#xff0c;她们更关注高品质、高口碑的优质产品。 在这样的营销氛围下&#xff0c;越来越多高单价产品将目光聚到这里&#xff0c;通过品牌精准营销&#xff0c;有效提升产品曝光和口碑&#x…

HighCharts点击无响应问题

HighCharts 点击无响应问题 背景介绍 项目需要展示一个小时内日志设备的状态&#xff0c;由于数据量比较大&#xff0c;使用echarts效果不好。于是采用highcharts来处理显示。highcharts使用起来很方便&#xff0c;还有打印照片功能&#xff0c;相当满意。这里采用官网给的例…

jsp初学

指令标识 html java代码 out内置对象,直接拿过来用 注释 <%-- 注释内容 --%>:JSP提供了隐藏注释&#xff0c;隐藏注释不仅在浏览器页面中看不到&#xff0c;在查看HTML源代码时也看不到 动态注释,网页看不到,只能看源码<!-- <%new Date()%> --> 指令 …

springboot配置redis、Spring cache

1.Jedis库 依赖库 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.0.2</version> </dependency>使用案例&#xff1a; Testpublic void jedis(){Jedis jedis new Jedis("127…