现在公司里面基本上封装数据用的都是JSON,让我们来学习学习JSON提高自己的录取概率

JSON解析:

使用Gson进行解析:下载google-gson-2.2.2-release.zip包。

包含两种主要操作:一种是将对象或者不同的内容转化为JSON格式,一种是将JSON格式的内容还原到相应的对象属性或者其他属性。

1、首先使用:Gson gson = new Gson();  创建gson对象

2、要把数据转化为JSON格式时,可以在新建一个JavaBean类:

public class Person {

    private String name;

    private int age;

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

    @Override

    public String toString() {

        return name + ":" + age;

    }

}

 

在主函数中使用如下语句:

Person p = new Person();

p.setAge(22);

p.setName("Curry");

persons.add(p);//Person对象加入到gson

String str = gson.toJson(p);

 

直接输出,得到以下结果:{"name":"Curry","age":22}

 

而当在gson中加入list类型的对象时:

List <Personpersons = new ArrayList<Person>();

for (int i = 0; i < 3; i++) {

        Person p = new Person();

        p.setName("name" + i);

        p.setAge(i * 5);

        persons.add(p);

    }

String str = gson.toJson(persons);

将输出以下结果:(格式是数组类型的)[{"name":"name0","age":0},{"name":"name1","age":5},{"name":"name2","age":10}]

 

HashMap tool = new HashMap();

tool.put("ID", "22");

String str = gson.toJson(tool);

以上表示加入的对象本身就是Map类型的,则输出以下结果:{"ID":"22"}

 

而如果加入的JavaBean中还包括其他的List类型的数据,例如:(代码片段)

public class Person {

    private String name;

    private int age;

    private ArrayList car;

则输出结果变成这样:

[{"name":"name0","age":0,"car":["cc","ford"]},{"name":"name1","age":5,"car":["cc","ford"]},{"name":"name2","age":10,"car":["cc","ford"]}]

1、   解析JSON对象,将其还原为JavaBean,或者相应的数据类型

String json = "{\"name\":\"Duke\",\"address\":\"Menlo Park\",\"dateOfBirth\":\"Feb 1, 2000 12:00:00 AM\"}";//JSON格式的数据

Gson gson = new Gson();

Student student = gson.fromJson(json, Student.class);//指定了要还原的class,保存在gson中。

System.out.println("student.getName()  = " + student.getName());

System.out.println("student.getAddress() = " + student.getAddress());

System.out.println("student.getDateOfBirth() = "

                + student.getDateOfBirth());//可以直接从student对象中获取到所有数据了。

 

4、如果Json对象本身是List形式的,或者其他的类型,则采用以下方法:

可以借助TypeToken获取泛型参数的类型。

String json = "[{\"name\":\"Duke\",\"address\":\"Menlo Park\",\"dateOfBirth\":\"Feb 1, 2000 12:00:00 AM\"}]";

Gson gson = new Gson();

//使用Type类,取得相应类型对象的class属性。

Type listType=newTypeToken<ArrayList<Student>>(){}.getType();//TypeToken内的泛型就是Json数据中的类型

        ArrayList list = gson.fromJson(json, listType);//使用该class属性,获取的对象均是list类型的

        System.out.println("student.getName()  = " + list.get(0).getName());//list中取得内容即可

        System.out.println("student.getAddress() = " + list.get(0).getAddress());

        System.out.println("student.getDateOfBirth() = "

                + list.get(0).getAddress());

 


这里用到了框架  X-Utils  不知道建议你们去用用,看看源码

部分实战代码

public void loadData(String url){
		final String name = Md5Utils.encode(url);
		httpUtils.send(HttpMethod.GET, url, new RequestCallBack<String>() {

			@Override
			public void onSuccess(ResponseInfo<String> responseInfo) {
				String result = responseInfo.result;
				processData(result);
				CacheUtils.saveCache(context, name, result);
			}

			@Override
			public void onFailure(HttpException error, String msg) {
				Toast.makeText(context, "获取新闻数据失败", 0).show();
				String result = CacheUtils.readCache(context, name);
				processData(result);
			}
		});
	}

/**
* 把json数据处理成对象
* @param result

这里用到了GSON
*/


<pre name="code" class="java"> public void processData(String result){
    	newsCenterNewsInfo = gson.fromJson(result, NewsCenterNewsInfo.class);
    	MyLoger.i(TAG, newsCenterNewsInfo.toString());
    	//执行图片的初始化
    	list  = new ArrayList<ImageView>();
    	for(TopNewsInfo info:newsCenterNewsInfo.data.topnews){
    		ImageView iv = new ImageView(context);
    		iv.setScaleType(ScaleType.FIT_XY);//设置图片的缩放类型  填充整个ImageView
    		bitmapUtils.display(iv, info.topimage);
    		list.add(iv);
    		//给图片设置数据
    		iv.setTag(info);
    		
    		//给图片设置监听
    		iv.setOnTouchListener(this);
    	}
    	myPagerAdapter = new MyPagerAdapter();
    	vp.setAdapter(myPagerAdapter);
    	vp.setOnPageChangeListener(this);
    	//给标题设置初始值
    	tv_title.setText(newsCenterNewsInfo.data.topnews.get(0).title);
    	
    	//初始化小圆点
    	ll_point.removeAllViews();
    	for(TopNewsInfo info:newsCenterNewsInfo.data.topnews){
    		View view = new View(context);
    		LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(5, 5);
    		params.rightMargin = 10;
    		ll_point.addView(view, params);
    		view.setBackgroundResource(R.drawable.point_gray);
    	}
    	ll_point.getChildAt(0).setBackgroundResource(R.drawable.point_red);
    	
    	//开始切换点
    	startSwitch();
    	
    	
    	myAdapter = new MyAdapter();
    	lv.setAdapter(myAdapter);
    	lv.setOnItemClickListener(this);
    }

 JavaBean 

public class NewsCenterNewsInfo {
	public NewsCenterNewsTabInfo data;
	public String retcode;

	public class NewsCenterNewsTabInfo{
		public String countcommenturl;
		public String more;
		public List<ListNewsInfo> news;
		public String title;
		public List<TopicInfo> topic;
		public List<TopNewsInfo> topnews;
	}
	
	/**
	 * 列表新闻
	 * @author apple
	 *
	 */
	public class ListNewsInfo{
		public boolean comment;
		public String commentlist;
		public String commenturl;
		public String id;
		public String listimage;
		public String pubdate;
		public String title;
		public String type;
		public String url;
	}
	
	public class TopicInfo{
		public String description;
		public String id;
		public String listimage;
		public String sort;
		public String title;
		public String url;
	}
}



 

因此,无论是把对象转化为Json格式,还是把Json格式还原为对象时,都需要确定好相应的数据类型或者 JavaBean的格式。这样就可以很方便的利益Gson进行转化了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值