腾讯课堂 —> 尚硅谷Android视频《JSON解析》
布局
activity_main.xml
<Button
android
:layout_width
="match_parent"
android
:layout_height
="wrap_content"
android
:id
="@+id/bt1"
android
:text
="json格式的字符串转Java对象"/>
<Button
android
:layout_width
="match_parent"
android
:layout_height
="wrap_content"
android
:id
="@+id/bt2"
android
:text
="json格式的字符串转Java对象的list"/>
<Button
android
:layout_width
="match_parent"
android
:layout_height
="wrap_content"
android
:id
="@+id/bt3"
android
:text
="复杂json数据解析"/>
<Button
android
:layout_width
="match_parent"
android
:layout_height
="wrap_content"
android
:id
="@+id/bt4"
android
:text
="特殊json数据解析"/>
<ScrollView
android
:layout_width
="match_parent"
android
:layout_height
="match_parent">
<LinearLayout
android
:layout_width
="match_parent"
android
:layout_height
="match_parent"
android
:orientation
="vertical">
<TextView
android
:layout_width
="wrap_content"
android
:layout_height
="wrap_content"
android
:text
="显示原始数据"
android
:textColor
="@color/colorAccent"/>
<TextView
android
:layout_width
="wrap_content"
android
:layout_height
="wrap_content"
android
:id
="@+id/tvJson"/>
<View
android
:layout_width
="match_parent"
android
:layout_height
="1.5dp"
android
:background
="#A9A9A9"/>
<TextView
android
:layout_width
="wrap_content"
android
:layout_height
="wrap_content"
android
:text
="解析后的数据"
android
:textColor
="@color/colorAccent"/>
<TextView
android
:layout_width
="wrap_content"
android
:layout_height
="wrap_content"
android
:id
="@+id/tvJava"/>
</LinearLayout
>
</ScrollView
>
先行准备
1. 创建一个ShopInfo.java(快捷键:Alt+Insert)
public class ShopInfo {
private int id
;
private String name
;
private double price
;
private String imagePath
;
public ShopInfo(int id
, String name
, double price
, String imagePath
) {
this.id
= id
;
this.name
= name
;
this.price
= price
;
this.imagePath
= imagePath
;
}
public ShopInfo() {
}
public int getId() {
return id
;
}
public void setId(int id
) {
this.id
= id
;
}
public String
getName() {
return name
;
}
public void setName(String name
) {
this.name
= name
;
}
public double getPrice() {
return price
;
}
public void setPrice(double price
) {
this.price
= price
;
}
public String
getImagePath() {
return imagePath
;
}
public void setImagePath(String imagePath
) {
this.imagePath
= imagePath
;
}
@Override
public String
toString() {
return "ShopInfo{" +
"\n\tid=" + id
+
", \n\tname='" + name
+ '\'' +
", \n\tprice=" + price
+
", \timagePath='" + imagePath
+ '\'' +
'}';
}
}
2. 创建一个DataInfo.java(安装插件GsonFormat)
Android Studio 安装插件GsonFormat (Json数据转换实体类)
import java
.util
.List
;
public class DataInfo {
private DataBean data
;
private String rs_code
;
private String rs_msg
;
@Override
public String
toString() {
return "DataInfo{" +
"\ndata=" + data
+
", \nrs_code='" + rs_code
+ '\'' +
", \nrs_msg='" + rs_msg
+ '\'' +
'}';
}
public DataBean
getData() {
return data
;
}
public void setData(DataBean data
) {
this.data
= data
;
}
public String
getRs_code() {
return rs_code
;
}
public void setRs_code(String rs_code
) {
this.rs_code
= rs_code
;
}
public String
getRs_msg() {
return rs_msg
;
}
public void setRs_msg(String rs_msg
) {
this.rs_msg
= rs_msg
;
}
public static class DataBean {
private int count
;
private List
<ItemsBean> items
;
@Override
public String
toString() {
return "DataBean{" +
"\ncount=" + count
+
", \nitems=" + items
+
'}';
}
public int getCount() {
return count
;
}
public void setCount(int count
) {
this.count
= count
;
}
public List
<ItemsBean> getItems() {
return items
;
}
public void setItems(List
<ItemsBean> items
) {
this.items
= items
;
}
public static class ItemsBean {
private int id
;
private String title
;
private String titile
;
@Override
public String
toString() {
return "\n\tItemsBean{" +
"id=" + id
+
", title='" + title
+ '\'' +
'}';
}
public int getId() {
return id
;
}
public void setId(int id
) {
this.id
= id
;
}
public String
getTitle() {
return title
;
}
public void setTitle(String title
) {
this.title
= title
;
}
public String
getTitile() {
return titile
;
}
public void setTitile(String titile
) {
this.titile
= titile
;
}
}
}
}
3. 创建一个FilmInfo.java
import java
.util
.List
;
public class FilmInfo {
private int code
;
private List
<FilmBean> list
;
@Override
public String
toString() {
return "FilmInfo{" +
"\ncode=" + code
+
", \nlist=" + list
+
'}';
}
public int getCode() {
return code
;
}
public void setCode(int code
) {
this.code
= code
;
}
public List
<FilmBean> getList() {
return list
;
}
public void setList(List
<FilmBean> list
) {
this.list
= list
;
}
public static class FilmBean{
private String aid
;
private String author
;
private int coins
;
private String copyright
;
private String create
;
@Override
public String
toString() {
return "\n\tFilmBean{" +
"\n\t\taid='" + aid
+ '\'' +
", \n\t\tauthor='" + author
+ '\'' +
", \n\t\tcoins=" + coins
+
", \n\t\tcopyright='" + copyright
+ '\'' +
", \n\t\tcreate='" + create
+ '\'' +
'}';
}
public String
getAid() {
return aid
;
}
public void setAid(String aid
) {
this.aid
= aid
;
}
public String
getAuthor() {
return author
;
}
public void setAuthor(String author
) {
this.author
= author
;
}
public int getCoins() {
return coins
;
}
public void setCoins(int coins
) {
this.coins
= coins
;
}
public String
getCopyright() {
return copyright
;
}
public void setCopyright(String copyright
) {
this.copyright
= copyright
;
}
public String
getCreate() {
return create
;
}
public void setCreate(String create
) {
this.create
= create
;
}
}
}
一、json格式的字符串转Java对象
Json数据
{
"id":2,"name":"小米煎饼",
"price":11.2,
"imagePath":"https://pics3.baidu.com/feed/960a304e251f95caf3db58a3973c4639670952af.jpeg?token=6d173c37740f4bcd401c8c44632b87d6"
}
MainActivity.java
bt1
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v
) {
jsonToJavaObjectByNative();
}
});
private void jsonToJavaObjectByNative(){
String json
= "{\n" +
"\t\"id\":2,\"name\":\"小米煎饼\",\n" +
"\t\"price\":11.2,\n" +
"\t\"imagePath\":\"https://pics3.baidu.com/feed/960a304e251f95caf3db58a3973c4639670952af.jpeg?token=6d173c37740f4bcd401c8c44632b87d6\"\n" +
"}";
JSONObject jsonObject
= null
;
ShopInfo shopInfo
= null
;
try {
jsonObject
= new JSONObject(json
);
int id1
= jsonObject
.getInt("id");
int id2
= jsonObject
.optInt("id");
String name
= jsonObject
.optString("name");
double price
= jsonObject
.optDouble("price");
String imagePath
= jsonObject
.optString("imagePath");
shopInfo
= new ShopInfo(id2
, name
, price
, imagePath
);
} catch (JSONException e
) {
e
.printStackTrace();
}
tvJson
.setText(json
);
tvJava
.setText(shopInfo
.toString());
}
实现图
二、json格式的字符串转Java对象的list
Json数据
[
{
"id":1,"name":"小米煎饼",
"price":11.2,
"imagePath":"https://pics3.baidu.com/feed/960a304e251f95caf3db58a3973c4639670952af.jpeg?token=6d173c37740f4bcd401c8c44632b87d6"
},
{
"id":2,"name":"芒果干",
"price":10.2,
"imagePath":"https://pics3.baidu.com/feed/960a304e251f95caf3db58a3973c4639670952af.jpeg?token=6d173c37740f4bcd401c8c44632b87d6"
}
]
MainActivity.java
bt2
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v
) {
jsonToJavaListByNative();
}
});
private void jsonToJavaListByNative() {
String json
= "[\n" +
"\t{\n" +
"\t\t\"id\":1,\"name\":\"小米煎饼\",\n" +
"\t\t\"price\":11.2,\n" +
"\t\t\"imagePath\":\"https://pics3.baidu.com/feed/960a304e251f95caf3db58a3973c4639670952af.jpeg?token=6d173c37740f4bcd401c8c44632b87d6\"\n" +
"\t},\n" +
"\t{\n" +
"\t\t\"id\":2,\"name\":\"芒果干\",\n" +
"\t\t\"price\":10.2,\n" +
"\t\t\"imagePath\":\"https://pics3.baidu.com/feed/960a304e251f95caf3db58a3973c4639670952af.jpeg?token=6d173c37740f4bcd401c8c44632b87d6\"\n" +
"\t}\n" +
"]";
List
<ShopInfo> shops
= new ArrayList<>();
try {
JSONArray jsonArray
= new JSONArray(json
);
for (int i
= 0; i
< jsonArray
.length(); i
++){
JSONObject jsonObject
= jsonArray
.getJSONObject(i
);
if (jsonObject
!= null
){
int id
= jsonObject
.getInt("id");
String name
= jsonObject
.optString("name");
double price
= jsonObject
.optDouble("price");
String imagePath
= jsonObject
.optString("imagePath");
ShopInfo shopInfo
= new ShopInfo(id
, name
, price
, imagePath
);
shops
.add(shopInfo
);
}
}
} catch (JSONException e
) {
e
.printStackTrace();
}
tvJson
.setText(json
);
tvJava
.setText(shops
.toString());
}
实现图
三、复杂json数据解析
Json数据
{
"data":{
"count":5,
"items":[
{
"id":45,
"title":"小麦"
},
{
"id":134,
"title":"大米"
},
{
"id":115,
"title":"小米"
},
{
"id":15,
"title":"苹果"
},
{
"id":68,
"title":"三只松鼠"
}
]
},
"rs_code":"1000",
"rs_msg":"success"
}
MainActivity.java
bt3
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v
) {
jsonToJavaOfComplex();
}
});
private void jsonToJavaOfComplex() {
String json
= "{\n" +
"\t\"data\":{\n" +
"\t\t\"count\":5,\n" +
"\t\t\"items\":[\n" +
"\t\t\t{\n" +
"\t\t\t\t\"id\":45,\n" +
"\t\t\t\t\"title\":\"小麦\"\n" +
"\t\t\t},\n" +
"\t\t\t{\n" +
"\t\t\t\t\"id\":134,\n" +
"\t\t\t\t\"titile\":\"大米\"\n" +
"\t\t\t},\n" +
"\t\t\t{\n" +
"\t\t\t\t\"id\":115,\n" +
"\t\t\t\t\"title\":\"小米\"\n" +
"\t\t\t},\n" +
"\t\t\t{\n" +
"\t\t\t\t\"id\":15,\n" +
"\t\t\t\t\"title\":\"苹果\"\n" +
"\t\t\t},\n" +
"\t\t\t{\n" +
"\t\t\t\t\"id\":68,\n" +
"\t\t\t\t\"title\":\"三只松鼠\"\n" +
"\t\t\t}\n" +
"\t\t]\n" +
"\t},\n" +
"\t\"rs_code\":\"1000\",\n" +
"\t\"rs_msg\":\"success\"\n" +
"}";
DataInfo dataInfo
= new DataInfo();
try {
JSONObject jsonObject
= new JSONObject(json
);
JSONObject data
= jsonObject
.optJSONObject("data");
String rs_code
= jsonObject
.optString("rs_code");
String rs_msg
= jsonObject
.optString("rs_msg");
dataInfo
.setRs_code(rs_code
);
dataInfo
.setRs_msg(rs_msg
);
DataInfo
.DataBean dataBean
= new DataInfo.DataBean();
dataInfo
.setData(dataBean
);
int count
= data
.optInt("count");
JSONArray items
= data
.getJSONArray("items");
dataBean
.setCount(count
);
List
<DataInfo
.DataBean
.ItemsBean
> itemsBean
= new ArrayList<>();
dataBean
.setItems(itemsBean
);
for (int i
= 0; i
< items
.length(); i
++){
JSONObject jsonObject1
= items
.optJSONObject(i
);
if (jsonObject1
!= null
){
int id
= jsonObject1
.optInt("id");
String title
= jsonObject1
.optString("title");
DataInfo
.DataBean
.ItemsBean bean
= new DataInfo.DataBean.ItemsBean();
bean
.setId(id
);
bean
.setTitle(title
);
itemsBean
.add(bean
);
}
}
} catch (JSONException e
) {
e
.printStackTrace();
}
tvJson
.setText(json
);
tvJava
.setText(dataInfo
.toString());
}
实现图
四、特殊json数据解析
json数据
{
"code":0,
"list":{
"0":{
"aid":"6008965",
"author":"滴滴滴",
"coins":170,
"copyright":"Copy",
"create":"2020-09-25 19:25"
},
"1":{
"aid":"12532654",
"author":"啧啧啧",
"coins":404,
"copyright":"Copy",
"create":"2020-09-26 20:25"
}
}
}
bt4
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v
) {
jsonToJavaOfSpecial();
}
});
private void jsonToJavaOfSpecial() {
String json
= "{\n" +
"\t\"code\":0,\n" +
"\t\"list\":{\n" +
"\t\t\"0\":{\n" +
"\t\t\t\"aid\":\"6008965\",\n" +
"\t\t\t\"author\":\"滴滴滴\",\n" +
"\t\t\t\"coins\":170,\n" +
"\t\t\t\"copyright\":\"Copy\",\n" +
"\t\t\t\"create\":\"2020-09-25 19:25\"\n" +
"\t\t},\n" +
"\t\t\"1\":{\t\t\t\n" +
"\t\t\t\"aid\":\"12532654\",\n" +
"\t\t\t\"author\":\"啧啧啧\",\n" +
"\t\t\t\"coins\":404,\n" +
"\t\t\t\"copyright\":\"Copy\",\n" +
"\t\t\t\"create\":\"2020-09-26 20:25\"\n" +
"\t\t}\n" +
"\t}\n" +
"}";
FilmInfo filmInfo
= new FilmInfo();
try {
JSONObject jsonObject
= new JSONObject(json
);
int code
= jsonObject
.optInt("code");
JSONObject list
= jsonObject
.optJSONObject("list");
filmInfo
.setCode(code
);
List
<FilmInfo.FilmBean> lists
= new ArrayList<>();
filmInfo
.setList(lists
);
for (int i
= 0; i
< list
.length(); i
++){
JSONObject jsonObject1
= list
.optJSONObject(i
+ "");
if (jsonObject1
!= null
){
String aid
= jsonObject1
.optString("aid");
String author
= jsonObject1
.optString("author");
int coins
= jsonObject1
.optInt("coins");
String copyright
= jsonObject1
.optString("copyright");
String create
= jsonObject1
.optString("create");
FilmInfo
.FilmBean filmBean
= new FilmInfo.FilmBean();
filmBean
.setAid(aid
);
filmBean
.setAuthor(author
);
filmBean
.setCoins(coins
);
filmBean
.setCopyright(copyright
);
filmBean
.setCreate(create
);
lists
.add(filmBean
);
}
}
} catch (JSONException e
) {
e
.printStackTrace();
}
tvJson
.setText(json
);
tvJava
.setText(filmInfo
.toString());
}
实现图
转载请注明原文地址:https://tech.qufami.com/read-6060.html