您的位置:首页 > 移动开发 > Android开发

Android中解析JSON

2012-04-16 18:25 253 查看
1.什么是JSON

  a.JSON:JavaScript Object Notation;

  b.JSON数据是一系列键值对的集合

  c.JSON已经被大多数开发人员接受,在网络数据的传输中应用非常广泛

  d.JSON相对于XML来讲解析稍微方便一些;

  e:JSON  VS XML

     (1).JSON和XML的数据可读性基本相同

     (2).JSON和XML同样拥有丰富的解析手段;

     (3)JSON相对于XML来讲,数据体积小;

     (4)JSON与JavaScript的交互更加方便

     (5).JSON对数据的描述性相对较差

2.JSON的数据格式的特点

 一个JSON的例子

{
"name":"zhangsan",
"address":
{
"city":"shengzhen",
"street":"qinghu"
}
}

3.使用Gson解析JSON

  1.添加包,下载地址:

  http://code.google.com/p/google-gson/

  2.新建一个JsonUtils.java的类

package wei.cao;

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;

public class JsonUtils {

public void parserUserFromJson(String jsonData)
{
/*[{"name":"wei_cao","age":20},{"name":"zhang_san","age":22}]
* 1.开始解析数组
* 2.开始解析对象
* 3.解析键值对
* 4.解析键值对
* 5.解析对象结束
* 6.开始解析对象
* 7.解析键值对
* 8.解析键值对
* 9,解析对象结束
* 10.解析数组结束
* */
//如果需要解析JSON数据,首先要生成一个JsonReader对象
JsonReader reader=new JsonReader(new StringReader(jsonData));
try {
reader.beginArray();
while(reader.hasNext())
{
reader.beginObject();
while(reader.hasNext())
{
String tagName=reader.nextName();
if(tagName.equals("name"))
{
System.out.println("age--->"+reader.nextString());
}
else if(tagName.equals("age"))
{
System.out.println("age--->"+reader.nextInt());
}
}
reader.endObject();

}
reader.endArray();
} catch (Exception e) {

e.printStackTrace();
}
}
//解析单一Json对象
public void parserUserFromJson1(String jsonData)
{
Gson gson=new Gson();
User user=gson.fromJson(jsonData, User.class);
System.out.print("name--->"+user.getName());
System.out.print("name--->"+user.getAge());
}
//解析Json对象的数组
public void parserUserFromJson2(String str)
{
Type listType=new TypeToken<LinkedList<User>>(){}.getType();
Gson gson=new Gson();
LinkedList<User> users=gson.fromJson(str, listType);
for(Iterator<User> iterator=users.iterator();iterator.hasNext();){
User user=(User)iterator.next();
System.out.print("name--->"+user.getName());
System.out.print("name--->"+user.getAge());
}
}
}

3.Activity_JsonActivity.java的内容如下

package wei.cao;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Activity_JsonActivity extends Activity {
/** Called when the activity is first created. */
private Button btnParseJson=null;
//private String jsonData="{\"name\":\"wei_cao\",\"age\":20}";
private String jsonData="[{\"name\":\"wei_cao\",\"age\":20},{\"name\":\"zhang_san\",\"age\":22}]";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

btnParseJson=(Button)this.findViewById(R.id.btnParseJson);
btnParseJson.setOnClickListener(new ButtonListener());
}
private class ButtonListener implements OnClickListener
{
@Override
public void onClick(View arg0) {
JsonUtils jsonUtils=new JsonUtils();
jsonUtils.parserUserFromJson(jsonData);
}

}
}


 

package wei.cao;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class Activity_JsonActivity extends Activity {

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

 private Button btnParseJson=null;

 //private String jsonData="{\"name\":\"wei_cao\",\"age\":20}";

 private String jsonData="[{\"name\":\"wei_cao\",\"age\":20},{\"name\":\"zhang_san\",\"age\":22}]";

 

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

       

        btnParseJson=(Button)this.findViewById(R.id.btnParseJson);

        btnParseJson.setOnClickListener(new ButtonListener());

    }

    private class ButtonListener implements OnClickListener

    {

  @Override

  public void onClick(View arg0) {

   JsonUtils jsonUtils=new JsonUtils();

   jsonUtils.parserUserFromJson(jsonData);

  }

     

    }

}

 

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