Android的JSON数据解析
一、 使用原生方式解析
准备工作:准备一个布局文件,用来显示元数据与转换之后的数据
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <Button
android:id="@+id/btn_String2JOSNObject"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="使用原生方式:String2JOSNObject " /> <Button
android:id="@+id/btn_String2JOSNArray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="使用原生方式:String2JOSNArray " /> <Button
android:id="@+id/btn_String2Bean_Gson"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="使用Gson方式:String2Bean " /> <Button
android:id="@+id/btn_String2List_Gson"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="使用Gson方式:String2List " /> <Button
android:id="@+id/btn_String2Arrays_Gson"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="使用Gson方式:String2Arrays " /> <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="元数据"
android:textColor="@android:color/holo_red_light"
android:textSize="20sp" /> <TextView
android:id="@+id/tv_metadata"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp" /> <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="转换后的数据"
android:textColor="@android:color/holo_red_light"
android:textSize="20sp" /> <TextView
android:id="@+id/tv_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp" /> </LinearLayout>
1. 使用原生方式---将String转换为JOSNObject
1.1 准备元数据
//使用原生方式: JSONObject2String
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("name","小米");
jsonObject.put("age",1);
JSONObject familyJOSN = new JSONObject();
familyJOSN.put("father","米爸");
familyJOSN.put("mother","米妈");
jsonObject.put("family",familyJOSN);
JSONArray hobbyArray = new JSONArray();
hobbyArray.put("篮球");
hobbyArray.put("看书");
jsonObject.put("hobby",hobbyArray); } catch (JSONException e) {
e.printStackTrace();
}
metaDataStr = jsonObject.toString();
tv_metadata.setText(jsonObject.toString());
1.2 开始转换数据
//使用原生方式:String2JOSNObject
findViewById(R.id.btn_String2JOSNObject).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
JSONObject jsonObject = new JSONObject(metaDataStr);
Log.e(JOSNActivity.class.getName(),jsonObject.toString());
String name = jsonObject.getString("name");
String age = jsonObject.getString("age");
JSONObject familyJOSN = new JSONObject(String.valueOf(jsonObject.getJSONObject("family")));
String father = familyJOSN.getString("father");
String mother = familyJOSN.getString("mother");
JSONArray hobbyArray = new JSONArray(jsonObject.getJSONArray("hobby").toString());
String hobby = "";
for(int i = 0; i < hobbyArray.length(); i ++){
if(i != hobbyArray.length() -1){
hobby = hobby + (String) hobbyArray.get(i)+"、";
}else {
hobby = hobby + (String) hobbyArray.get(i);
} }
String resultStr = "姓名:"+name+",年龄:"+age+",家庭成员:"+father+"、"+mother+",爱好:"+hobby;
tv_data.setText(resultStr);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
2. 使用原生方式:将String转换为JOSNArray
2.1 准备元数据
// JSONArray2String
JSONArray array = new JSONArray();
for(int i = 0; i < 2; i ++){
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("name","小米"+i);
jsonObject.put("age",22+i);
array.put(jsonObject);
} catch (JSONException e) {
e.printStackTrace();
}
}
metaDataStr = array.toString();
tv_metadata.setText(metaDataStr);
2.2 开始转换数据
//使用原生方式:String2JOSNArray
findViewById(R.id.btn_String2JOSNArray).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
String resultStr = "";
JSONArray jsonArray = new JSONArray(metaDataStr);
for(int i = 0; i < jsonArray.length(); i ++){
JSONObject jsonObject = (JSONObject) jsonArray.get(i);
resultStr = resultStr + "第" + i + "组姓名:"+ jsonObject.getString("name") +
",年龄:"+ jsonObject.getString("age")+"\n";
}
tv_data.setText(resultStr);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
二、 使用GSON解析JSON数据
1. 使用Gson方式:将String转换为Bean
1.1 准备Bean类
static class Bean{
public Bean(String name,int age,List<String> hobby){
this.name = name;
this.age = age;
this.hobby = hobby;
Family family = new Family();
family.setFather(name+"爸");
family.setMother(name+"妈");
this.family = family;
}
/**
* name : 小米
* family : {"mother":"米妈","father":"米爸"}
* age : 1
* hobby : ["篮球","看书"]
*/
private String name;
private Family family;
private int age;
private List<String> hobby;
public void setName(String name) {
this.name = name;
}
public void setFamily(Family family) {
this.family = family;
}
public void setAge(int age) {
this.age = age;
}
public void setHobby(List<String> hobby) {
this.hobby = hobby;
}
public String getName() {
return name;
}
public Family getFamily() {
return family;
}
public int getAge() {
return age;
}
public List<String> getHobby() {
return hobby;
}
public static class Family {
/**
* mother : 米妈
* father : 米爸
*/
private String mother;
private String father;
public void setMother(String mother) {
this.mother = mother;
}
public void setFather(String father) {
this.father = father;
}
public String getMother() {
return mother;
}
public String getFather() {
return father;
}
}
}
1.2 准备元数据
//使用Gson方式:Bean2String
Gson gson = new Gson();
List<String> list = new ArrayList<>();
list.add("篮球");
list.add("看书");
Bean bean = new Bean("小米",23,list);
metaDataStr = gson.toJson(bean).toString();
tv_metadata.setText(metaDataStr);
1.3 开始转换数据
//使用Gson方式:String2Bean
findViewById(R.id.btn_String2Bean_Gson).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Gson gson = new Gson();
Bean resultBean = gson.fromJson(metaDataStr,Bean.class);
String name = resultBean.getName();
int age = resultBean.getAge();
String father = resultBean.getFamily().getFather();
String mother = resultBean.getFamily().getMother();
List<String> list = resultBean.getHobby();
String hobby = "";
for(int i = 0; i < list.size(); i ++){
if(i != list.size() -1){
hobby = hobby + (String) list.get(i)+"、";
}else {
hobby = hobby + (String) list.get(i);
} }
String resultStr = "姓名:"+name+",年龄:"+age+",家庭成员:"+father+"、"+mother+",爱好:"+hobby;
tv_data.setText(resultStr);
}
});
2. 使用Gson方式:将String转换为List
2.1 准备元数据
//使用Gson方式:List2String
Gson gson = new Gson();
List<Bean> beans = new ArrayList<>();
List<String> list = new ArrayList<>();
list.add("篮球");
list.add("看书");
Bean bean1 = new Bean("小米",23,list);
Bean bean2 = new Bean("菲菲",24,list);
beans.add(bean1);
beans.add(bean2);
metaDataStr = gson.toJson(beans);
tv_metadata.setText(metaDataStr);
2.2 开始转换数据
//使用Gson方式:String2List
findViewById(R.id.btn_String2List_Gson).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Gson gson = new Gson();
// Gson为我们提供了TypeToken来实现对泛型的支持,
List<Bean> beans = gson.fromJson(metaDataStr,new TypeToken<List<Bean>>(){}.getType());
String resultStr ="";
for(int i = 0; i < beans.size() ; i++){
String name = beans.get(i).getName();
int age = beans.get(i).getAge();
String father = beans.get(i).getFamily().getFather();
String mother = beans.get(i).getFamily().getMother();
resultStr = resultStr + "姓名:"+name+",年龄:"+age+",家庭成员:"+father+"、"+mother+"\n";
}
tv_data.setText(resultStr);
}
});
3. 使用Gson方式:将String转换为Arrays
3.1 准备元数据
//使用Gson方式:Arrays2String
String[] arrays = {"张三","李四","王五","赵六"};
Gson gson = new Gson();
metaDataStr = gson.toJson(arrays);
tv_metadata.setText(metaDataStr);
3.2 开始转换数据
//使用Gson方式:String2Arrays
findViewById(R.id.btn_String2Arrays_Gson).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Gson gson = new Gson();
//此时String[]当成一个实体类
String[] arrays = gson.fromJson(metaDataStr,String[].class);
String resultStr = "";
for(int i = 0; i < arrays.length;i ++){
resultStr = resultStr + arrays[i] +";";
}
tv_data.setText(resultStr);
}
});
Android的JSON数据解析的更多相关文章
- Android系列---JSON数据解析
您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...
- Android 实现Json数据解析,并进行应用!
从网站上获取数据然后再客户端进行解析是常见的数据交互.下面是常用的一些接口网址: webservice工厂接口 http://www.36wu.com 快递查询接口http://webservice. ...
- Android 之JSON数据解析
(以下基本都是郭霖大神<第一行代码>中的知识) JSON数据与xml相比,优势在于体积更小,传输所需的流量少.但是缺点也很明显,就是语义性较差. 下面是一组JSON格式的数据. [{&qu ...
- Android关于JSON数据解析
一.什么是json json(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以 ...
- Android下Json数据解析
如从网络获取JSON 则需要创建一个工具类,该类返回一个字符串为JSON文本 package com.example.jsonapp; import java.io.InputStreamReader ...
- Android 之 json数据的解析(jsonReader)
json数据的解析相对而言,还是比较容易的,实现的代码也十分简单.这里用的是jsonReade方法来进行json数据解析. 1.在解析之前,大家需要知道什么是json数据. json数据存储的对象是无 ...
- Android网络之数据解析----使用Google Gson解析Json数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
- Android JSON数据解析(GSON方式)
要创建和解析JSON数据,也可以使用GSON来完成.GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.使用GSON,可以很容易的将一串JSON数据转换为一个Jav ...
随机推荐
- laravel之数据库增删改查
- eclipse创建spring boot项目,tomcat启动成功,但http://localhost:8080无法访问报错404解决方案
spring boot的启动程序启动后,在访问http://localhost:8080地址的时候出现了错误,为什么出错网上我找了好久也没有得出具体的解决办法 当我指定到具体的action的时候,却可 ...
- FTP服务器匿名登录
ftp需要开通对匿名用户.本地用户.及虚拟用户的支持.并且特别对虚拟用户中的(stu.teacher.admin)分别授予不同的权限. 1.创建多层目录,然后挂载 2.配置yum源文件 3.安 ...
- C++中继承与抽象类
继承语法格式如下: class 子类名称 : 继承方式(public private protected 三种) 父类名称 纯虚函数格式: virtual 返回值类型 函数名(参数列表)= 0:含有纯 ...
- python菜鸟学习心得
禁忌:学习没精力,就是没精打采.没有热情. 禁忌:学习一半,然后,放在一边. 禁忌:不要东一榔头,西一棒锤. 禁忌:学习要用心. 激情是动力,专注是效率 每次学习都是绕着网络转了一圈.还是要一步一个脚 ...
- CISCO MDS – Useful ‘Show’ Commands
CISCO MDS – Useful ‘Show’ Commands CONFIG:show startup-configshow running-configshow running-config ...
- nregistering JMX-exposed beans
https://blog.csdn.net/yang474231561/article/details/81738632 https://stackoverflow.com/questions/507 ...
- Java-字符串、集合
1.只要是字符串,必然是对象. 2.API文档的基本使用 3.如何创建字符串: 直接饮用赋值,也是一个字符串对象. 可以通过new关键字来调用string的构造方法: public string (c ...
- 2018-2019-2 20165225《网络对抗技术》Exp1 缓冲区溢出实验
2018-2019-2 20165225<网络对抗技术>Exp1 缓冲区溢出实验 声明 虽然老师在邮箱中要求要把虚拟机名改为个人名字缩写,但是我的kali好像不是很听话...重启数次也没用 ...
- plsql导入.dmp, .sql步骤
plsql导入.sql和.dmp文件时,会经常用到,对于初学者来说可能没有那么简单,毕竟oracle数据库比较麻烦. 下面是我自己导入.sql和.dmp文件的步骤. 1.导入.sql文件(sql文件是 ...