您的位置:首页 > Web前端 > JavaScript

Json对象解析

2012-03-14 15:45 155 查看
(一)在网络数据传输中,经常用到Json或者xml,两者在可读性、解析手段上均比较好,但是Json优势是体积小,与JavaScript交互方便,缺点是对数据的可描述性比较差。

(二)Json由一系列的键值对的集合或 数组对象。

(三)例子:{"name”:"zhangsan","age":10}或者[{"name”:"zhangsan","age":10},:{"name”:"lisi","age":20}]

(四)解析

可以调用Google-gson进行解析,参考里面的例子。从android 3.0开始,android加入了JsonReader类,该类可以控制Json的读取。

下面是个例子:

1.JsonDemoActivity类

package com.wewell.json;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

//Json源数据及调用解析

public class JsonDemoActivity extends Activity {

/** Called when the activity is first created. */

private Button btn_json = null;//测试json数据

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

btn_json = (Button)findViewById(R.id.btnjson);

btn_json.setOnClickListener(new testJson());

}

class testJson implements OnClickListener{

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

JsonUtils json = new JsonUtils();

String jsonData = "[{\"name\":\"Michael\",\"age\":20},{\"name\":\"Mike\",\"age\":21}]";

json.parseJson(jsonData);

String jsonData2 = "{\"name\":\"test\",\"age\":10}";

json.partJson2(jsonData2);

json.parseUserFromJson(jsonData);

}

}

}

2.JsonUtils类

package com.wewell.json;

import java.io.StringReader;

import java.lang.reflect.Type;

import java.util.Iterator;

import java.util.LinkedList;

import com.google.gson.Gson;

import com.google.gson.reflect.TypeToken;

import com.google.gson.stream.JsonReader;

//执行解析Json操作

public class JsonUtils {

public void partJson2(String jsonData){

Gson gson = new Gson();

User user = gson.fromJson(jsonData, User.class);//Json对象转换为对象

System.out.println("Json对象:name--->" + user.getName());

System.out.println("Json对象:age---->" + user.getAge());

}

public void parseJson(String jsonData){

try{

//如果需要解析JSON数据,首要要生成一个JsonReader对象

JsonReader reader = new JsonReader(new StringReader(jsonData));

reader.beginArray();//开始解析数组

while(reader.hasNext()){

reader.beginObject();//开始解析数组中对象

while(reader.hasNext()){

String tagName = reader.nextName();//解析键值对

if(tagName.equals("name")){

System.out.println("name--->" + reader.nextString());

}

else if(tagName.equals("age")){

System.out.println("age--->" + reader.nextInt());

}

}

reader.endObject();//结束解析数组中对象

}

reader.endArray();//结束解析数组

}

catch(Exception e){

e.printStackTrace();

}

}

public void parseUserFromJson(String jsonData){

Type listType = new TypeToken<LinkedList<User>>(){}.getType();

Gson gson = new Gson();

LinkedList<User> users = gson.fromJson(jsonData, listType);//进行Json对象转换为对象的迭代

for (Iterator iterator = users.iterator(); iterator.hasNext();) {

User user = (User) iterator.next();

System.out.println("name--->" + user.getName());

System.out.println("age---->" + user.getAge());

}

}

}

3.user类

package com.wewell.json;

/**

* 联系Json对象转为实体对象

* @author wangke

*

*/

public class User {

private String name=null;

private int age = 0;

public void setName(String name){

this.name = name;

}

public void setAge(int age){

this.age = age;

}

public String getName(){

return this.name;

}

public int getAge(){

return this.age;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: