当前位置: 首页 > 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("王梓");
http://www.lryc.cn/news/211985.html

相关文章:

  • 金融领域:怎么保持电力系统连续供应?
  • 批量重命名文件夹:用数字随机重命名法管理您的文件夹
  • RPC与HTTP的关系
  • OpenCV #以图搜图:感知哈希算法(Perceptual hash algorithm)的原理与实验
  • Android多张图片rotation旋转角度叠加/重叠堆放
  • HBuilderX 自定义语法提示
  • Leetcode—2562.找出数组的串联值【简单】
  • T0外部计数输入
  • 分治法求解棋盘覆盖问题
  • 爱写bug的小邓程序员个人博客
  • selenium判断元素可点击、可见、可选
  • 计算机网络重点概念整理-第六章 应用层【期末复习|考研复习】
  • html2pdf
  • css中页面元素隐藏
  • dp三步问题
  • 结构体和联合体嵌套访问
  • Linux ———— 管理磁盘
  • 文字的编码
  • 21.9 Python 使用Selenium库
  • C++初阶2
  • 网络安全(黑客)—小白自学
  • 在win10下,使用torchviz对深度学习网络模型进行可视化
  • 【自然语言处理】【长文本处理】RMT:能处理长度超过一百万token的Transformer
  • 交叉编译工具链(以STM32MP1为例)
  • 使用 Pyro 和 PyTorch 的贝叶斯神经网络
  • How to install the console system of i-search rpa on Centos 7
  • sql--索引使用 ---覆盖索引
  • 系统平台同一网络下不同设备及进程的话题通讯--DDS数据分发服务中间件
  • 轻量级 IDE 文本编辑器 Geany 发布 2.0
  • 好用工具分享 | tmux 终端会话分离工具