Android数据解析JSON解析之手动JSON解析
JSON简介
定义
JSON的全称是JavaScript Object Notation,是一种轻量级的数据交换格式。
JSON 语法是 javascript 语法的子集。
特点
(1)JSON比XML数据传输的有效性要高出很多
(2)JSON完全独立于编程语言。
(3)本质就是具有特定格式的字符串
JSON 语法规则
JSON 语法是 JavaScript 对象表示法语法的子集。
- 数据在名称/值对中 如”firstName” : “John”
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON 值类型
JSON 值可以是:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true或false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
常用的JSON值类型是:
JSON数组
{
“employees”: [
{ “firstName”:”John” , “lastName”:”Doe” },
{ “firstName”:”Anna” , “lastName”:”Smith” },
{ “firstName”:”Peter” , “lastName”:”Jones” }
]
}
JSON 数组在方括号中书写:
JSON对象
对象可以包含多个名称/值对:
{ “firstName”:”John” , “lastName”:”Doe” }
JSON 对象在花括号中书写
手动JSON解析
1、将JSON 对象转化为Java对象
测试数据
{
"id":2, "name":"大虾",
"price":12.3,
"imagePath":"http://192.168.10.165:8080/L05_Server/images/f1.jpg"
}
代码:
private void jsonToJavaObject() {
//获取json字符串
String jsonData = "{\n" +
"\t\"id\":2, \"name\":\"大虾\", \n" +
"\t\"price\":12.3, \n" +
"\t\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\"\n" +
"}";
ShopInfo shopInfo = new ShopInfo();
//解析json
try {
//获取JsonObject对象
JSONObject jsonObject = new JSONObject(jsonData);
/**获取数据
* getInt("key") 取值 不存在 或者类型不对 报错
optInt("key") 取值 不存在 返回默认值
*/
int id = jsonObject.optInt("id");
String name = jsonObject.optString("name");
Double price = jsonObject.optDouble("price");
String imagePath = jsonObject.optString("imagePath");
//封装成Java对象
shopInfo = new ShopInfo(id, name, price, imagePath);
} catch (JSONException e) {
e.printStackTrace();
}
测试效果:
2、将json格式的数组[]转换为Java对象的List集合
测试数据
[
{
"id": 1,
"imagePath": "http://192.168.10.165:8080/f1.jpg",
"name": "大虾1",
"price": 12.3
},
{
"id": 2,
"imagePath": "http://192.168.10.165:8080/f2.jpg",
"name": "大虾2