Android Gson解析json

本文介绍了如何在Android中使用Gson库进行JSON解析和序列化。Gson提供了一种将Java对象转换为JSON字符串以及将JSON字符串转换回Java对象的方法。文章详细展示了单个和多个对象的序列化与反序列化过程,并探讨了如何处理复杂JSON数据的解析需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

  • 解析json的库有很多,如:JSON-Java、Gson、Jackson、FastJson…
  • 而Gson是谷歌的,相信自有它的好处

简介

  • 用于json与java对象之间的转换
  • 通过 序列化和反序列化 实现
  • 功能强大,稳定性也好

使用

  • Gson提供了两个方法,可实现json对象与java对象之间的转换
方法解析
toJson()序列化:将java对象转换为json对象,生成json类型的数据
fromJson()反序列化:将json对象转换为java对象,解析json类型的数据

使用步骤

(准备工作)

引入库
compile 'com.google.code.gson:gson:2.8.5'

创建Gson对象

Gson gson=new Gson();

序列化(单个)

  1. 准备好要序列化的数据(单个)
data data1=new data();
data1.setAge(18);
data1.setName("君莫笑");
  1. 序列化
String json=gson.toJson(data1);
  1. 将结果显示到TextView上

在这里插入图片描述

序列化(多个)

  1. 准备好要序列化的数据(多个)
List<data>list=new ArrayList<data>();

data data1=new data();
data1.setAge(18);
data1.setName("君莫笑");
list.add(data1);

data data2=new data();
data2.setAge(4);
data2.setName("我已经不是3岁小孩了");
list.add(data2);
  1. 序列化
String json=gson.toJson(list);
json = gson.toJson(list);
  1. 将结果显示到TextView上
TextView tv=(TextView) findViewById(R.id.mainTextView1);
tv.setText(json);

效果图:
在这里插入图片描述

补:data.java

public class data
{
   String name;
   int age;
   
   public void setAge(int age)
   {
      this.age = age;
   }
   public int getAge()
   {
      return age;
   }
   public void setName(String name)
   {
      this.name = name;
   }
   public String getName()
   {
      return name;
   }
}

反序列化(单个)

  1. 准备要反序列化的数据(单个)
    (直接引用上面的数据了)
data data1=new data();
data1.setAge(18);
data1.setName("君莫笑");
Gson gson=new Gson();
String json=gson.toJson(data1);
  1. 反序列化
data mydata=gson.fromJson(json,data.class);
  1. 将结果显示到TextView上
tv.setText("age="+mydata.getAge()+"   name="+mydata.getName());

在这里插入图片描述

反序列化(多个)

  1. 准备要反序列化的数据(多个)
    (直接引用上面的数据了)
List<data>list=new ArrayList<data>();
data data1=new data();
data1.setAge(18);
data1.setName("君莫笑");
list.add(data1);

data data2=new data();
data2.setAge(4);
data2.setName("我已经不是3岁小孩了");
list.add(data2);
String json = gson.toJson(list);
  1. 反序列化
StringBuffer stringbuffer=new StringBuffer();
data[]mydata= gson.fromJson(json,data[].class);	
for(int i=0;i<d.length;i++){
  stringbuffer.append("age="+d[i].getAge()+"   name="+mydata[i].getName()+"\n");
}
  1. 将结果显示到TextView上
tv.setText(stringbuffer);

在这里插入图片描述

进阶

我们理想中的json

[
  {
    "age": 18 ,
    "name": "君莫笑"
  } ,
  {
    "age": 4 ,
    "name": "我已经不是3岁小孩了"
  }
]

现实中的json

{
  "一班": {
    "优秀生": [
      {
        "age": 18 ,
        "name": "君莫笑"
      } ,
      {
        "age": 4 ,
        "name": "我已经不是3岁小孩了"
      }
    ]
    "差等生": [
      {
        "age": 26 ,
        "name": "把酒一杯"
      } ,
      {
        "age": 12 ,
        "name": "以我为王"
      }
    ]
  }
  "二班": {
    "优秀生": [
      {
        "age": 15 ,
        "name": "小魔仙"
      } ,
      {
        "age": 999 ,
        "name": "巫女"
      }
    ]
  }
}

解析json

json的数据有很多,但我们只需要解析我们需要的部分,具体如下:

String myjson=new JSONObject(json).getJSONObject("一班").getJSONArray("优秀生").toString();
StringBuffer stringbuffer=new StringBuffer();
data[]mydata= gson.fromJson(myjson,data[].class);	
for(int i=0;i<mydata.length;i++){
   stringbuffer.append("age="+mydata[i].getAge()+"   name="+mydata[i].getName()+"\n");
}

将结果显示到TextView上

tv.setText(stringbuffer);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值