android gson读取json文件,android使用Gson来解析json

这篇博客介绍了如何使用Gson库解析JSON数据。通过示例代码展示了如何解析复杂和数组类型的JSON对象,强调了在遇到`java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 81`错误时,应如何正确处理。同时,提供了如何构建对应的Java对象以匹配JSON结构的方法。

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

Gson是更流行的解析json的库里,我自己一把很喜欢用Gson来解析,因为直接可以写对象和json文件相对应

对于一个标准的后台返回:{

"data": {

"product_info": {

"name": "澳斯贝贝 婴儿长袖水晶绒睡袋 100cm 4",

"image": "http://img01.meituncdn.com/group2/M00/00/78/rBABnFVMXPqAKlu5AAD9lKlBSzE063.jpg",

"stock": 0

},

"task_list": [

{

"task_id": 4,

"status": "进行中"

}

]

},

"status": "success",

"message": null

}

我们可以这样来构造解析对象:public class HistoryResponse {

public HistoryData data;

public String status;

public String message;

}public class ProductInfo {

public String name;

public String image;

public int stock;

}public class HistoryData {

public ProductInfo product_info;

public ArrayList task_list;

}public class Tasks {

public int id;

public String status;

}

解析代码很简洁:public void parseAssertDataUseGson() {

InputStream is = null;

try {

is = this.getAssets().open("json2.json", Context.MODE_PRIVATE);

int length = is.available();

byte[] buffer = new byte[length];

is.read(buffer);

Reader response = new StringReader(new String(buffer));

Gson gson = new Gson();

HistoryResponse mydata = gson.fromJson(response,HistoryResponse.class);

Log.d("TAG","<<<

} catch (IOException ex) {

ex.printStackTrace();

}

}

有一点要注意,对于

[

{

"booid": 1,

"bookName": "aa",

"icon": "http://pij4ed5ao.bkt.clouddn.com/1.jpg",

"book_description": "aa1"

},

{

"booid": 2,

"bookName": "bb",

"icon": "http://pij4ed5ao.bkt.clouddn.com/22.jpg",

"book_description": "bb1"

},

{

"booid": 3,

"bookName": "cc",

"icon": "http://pij4ed5ao.bkt.clouddn.com/33.jpeg",

"book_description": "cc1"

}

]

这样的json,我们需要用以下来解析private void parseResponse(String response) {

try{

Gson gson = new Gson();

JSONArray jsonArray = new JSONArray(response);

ArrayList books;

mBookResponse = new Gson().fromJson(response, new TypeToken>(){}.getType());

}catch (Exception ex) {

ex.printStackTrace();

}

}public class Book {

public int booid;

public String bookName;

public String icon;

public String book_description;

}

才不会出错

如果json出现java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 81这个问题,就代表解析器expected是一个array不过

实际解析的是一个jsonObject的错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值