Json的解析

本文介绍了JSON数据格式的基本概念及其在客户端和服务器端的数据交互中如何节省流量。通过提供两种JSON解析方式,即使用Android自带的org.json库和Google的Gson库,详细解释了如何将JSON字符串解析为对象,并进行属性值的获取和设置。同时,展示了如何使用Gson将对象转换回JSON字符串,以及如何处理JSON数组。最后,通过示例代码和打印结果,直观地演示了JSON解析过程。

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

<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);">Json是一种轻便的数据交换格式,客户端和服务器端用Json来交互数据,会比其他一些交换格式(比如说XML)更省流量</span>
Json可以用来传递String,Number,Boolean,数组以及对象等格式的数据
Json对象有两种表示方式,一种是JsonObject
{"name":"小探寻","年龄":"21"}
      另外一种是Json数组。
[{"name":"小探寻","年龄":"21"},{"name":"Huber","年龄":"20"}]
两种表示方式可以互相嵌套,例如:{"Girls":"[{"name":"小探寻","年龄":"21"},{"name":"Huber","年龄":"20"}]"}
关于Json解析,这里介绍两种方式
  1.org.json    这是Android的API自带的Json解析方式
  2.com.google.gson 这是Google自己封装的Json解析方式

多说无意义,还是先上代码吧.

//第一种解析方式
public class MainActivity extends Activity {

	//在这里需要对字符进行转义
	private String JsonData = "[{\"name\":\"小探寻\",\"age\":\"21\"}";
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		try {
			//将JSON字符串转化成JSONObject对象
			JSONObject jsonObject = new JSONObject(JsonData);
			
			//获取JSONObject对象的属性值
			String name = jsonObject.getString("name");
			int age = jsonObject.getInt("age");
			System.out.println("姓名"+name+",年龄"+age);
		} catch (JSONException e) {
			e.printStackTrace();
		}
	}
}


import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

	//在这里需要对字符进行转义
	private String JsonData = "[{\"name\":\"小探寻\",\"age\":\"21\"},{\"name\":\"Huber\",\"age\":\"20\"}]";
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		try {
			//取得JSONArray
			JSONArray jsonArray = new JSONArray(JsonData);
			
			//获取JSONObject对象的属性值
			for(int i=0; i<jsonArray.length(); i++){
				JSONObject jsonObject = jsonArray.getJSONObject(i);
				String name = jsonObject.getString("name");
				int age = jsonObject.getInt("age");
				System.out.println("姓名"+name+",年龄"+age);
			}
			
		} catch (JSONException e) {
			e.printStackTrace();
		}
	
	}

	

}
下面是打印结果:


2.利用Gson解析. 这里需要Gson的jar包的支持。

public class MainActivity extends Activity {

	//在这里需要对字符进行转义
//	private String JsonData = "{\"girlName\":\"小探寻\",\"girlAge\":\"21\"}";
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
//			Gson gson = new Gson();
//			//JSON字符串转换成对象,这里注意JSON字符串的key和实体对象的成员变量名要一致,fromJson(参数1,参数2)参数1是要转换的JSON字符串,参数2是要转换的目标对象
//			Girl girl = gson.fromJson(JsonData, Girl.class);
//			String name = girl.getGirlName();
//			int age = girl.getGirlAge();
//			System.out.println("姓名"+name+",年龄"+age);
//		
		//对象转换成JSON字符串
		Girl girl = new Girl();
		girl.setGirlName("高圆圆");
		girl.setGirlAge(31);
		
		Gson gson = new Gson();
		//toJson的参数可以是一个对象,也可以是对歌对象的集合如List<Girl>
		String jsonString = gson.toJson(girl);
		System.out.println(".............."+jsonString);
		
		 String JsonData1 = "[{\"girlName\":\"小探寻\",\"girlAge\":\"21\"},{\"girlName\":\"高圆圆\",\"girlAge\":\"31\"}]";
		
		//TypeToken,它是gson提供的数据类型转换器,可以支持各种数据集合类型转换。
		 List<Girl> girls = gson.fromJson(JsonData1, new TypeToken<List<Girl>>(){}.getType());
		 for(Girl girl2: girls){
			 String name = girl2.getGirlName();
			 int age = girl2.getGirlAge();
			 System.out.println("姓名"+name+",年龄"+age);
		 }
	}
}
打印结果:
 


关于JSON解析我学到的暂时就是这么多.还有更多的知识,你们可以去自己了解得更多.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值