JSON数据

目录

一、JSON介绍

1.对象结构

2.数组结构

二、JSON解析

1.使用JSONObject类与JSONArray类解析JSON数据

(1)使用JSONObject类解析对象结构JSON数据

(2)使用JSONArray类解析数组结构JSON数据

2.使用GSON库解析JSON数据

(1)解析对象结构JSON

(2)解析数组结构JSON(其中包含对象结构JSON)

三、获取JSONObject、JSONArray对象

1.文件中获取

2.服务器返回数据中获取

四、创建JSON数据

1.创建 .json 文件

2.程序中创建 JSONObject / JSONArray


一、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所含值,这种方法是安全的,opt方法遇到空字段返回默认值(空字符,false,0);如使用getXXX(String valueName)方法获取JSON所含值,get方法在遇到空数据时抛出异常。

//根据字符串型的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所含值,这种方法是安全的,opt方法遇到空字段返回默认值(空字符,false,0);如使用getXXX(String valueName)方法获取JSON所含值,get方法在遇到空数据时抛出异常。

//根据字符串型的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值一致

//在清单文件中引入依赖
implementation 'com.google.code.gson:gson:2.8.8'

例:

//自定义类
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");//从该程序私有文件读取
InputStream inputStream=getResources().openRawResource(R.raw.myjson);//raw文件获取

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 文件

res -> [new] -> [Android Resource Directory] -> Resource type : raw ->raw-> [new] -> [File] 文件后缀为.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("王梓");
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下嗷呜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值