android开发之JSON数据解析

来源:互联网 发布:手机申请淘宝号的步骤 编辑:程序博客网 时间:2024/05/17 13:06

android开发之JSON数据解析

本博文主要讲述的是使用google的lib库gson解析JSON数据的方法,因为android自带的JSON数据解析器对只可以在android 3.0以上版本才能适用,如果需要使用gson,我们需要在项目中添加gson的lib库文件,然后add path。详细代码如下:

MainActivyty.java:

package com.example.analysisjson;

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


public class MainActivity extends Activity {


private Button myButton = null;
private String jsonData = "[{\"name\":\"zhangsan\",\"age\":21},{\"name\":\"lisi\",\"age\":33}]";
private String jsonOjectData = "{\"name\":\"zhangsan\",\"age\":21}";
private String jsonOjectsData = "[{\"name\":\"zhangsan\",\"age\":21},{\"name\":\"lisi\",\"age\":33}]";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myButton = (Button)findViewById(R.id.myButton);
myButton.setOnClickListener(new SetButtonListener());
}

class SetButtonListener implements OnClickListener{

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
JsonUtils jsonUtils = new JsonUtils();
//解析JSON数组
//jsonUtils.parseArrayData(jsonData);
//解析单个JSON对象
//jsonUtils.parseObjectData(jsonOjectData);
//解析多个JSON对象
jsonUtils.parseObjectsData(jsonOjectsData);
}

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}


}


JsonUtils.java:


package com.example.analysisjson;


import java.io.IOException;
import java.io.StringReader;
import java.lang.reflect.Type;
import java.util.Iterator;
import java.util.LinkedList;


import android.R.integer;




import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;


/*
 * 应为Android自带的JsonReader只支持3.0以上的版本,
 * 此处主要是采用的google 的 gson解析器,解析json,没有版本的限制
 * 需要在项目中添加gson的libs
 * */


public class JsonUtils {

/*
* example:"[{\"name\":\"zhangsan\",\"age\":21},{\"name\":\"lisi\",\"age\":33}]"
* JSON数组解析的步骤如下:
* 1、开始解析数组
* 2、开始解析对象
* 3、解析键值对
* 4、解析键值对结束
* 5、解析对象结束
* 6、解析数组结束
* */
public void parseArrayData(String jsonData){

try {
JsonReader jsonReader = new JsonReader(new StringReader(jsonData));
jsonReader.beginArray();
while(jsonReader.hasNext()){
jsonReader.beginObject();
while(jsonReader.hasNext()){
String tagName = jsonReader.nextName();
if(tagName.equals("name")){
System.out.print("name --> " + jsonReader.nextString());
}else if(tagName.equals("age")){
System.out.println(";age --> " + jsonReader.nextInt());
}
}
jsonReader.endObject();
}
jsonReader.endArray();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}


/*
* example:"{\"name\":\"zhangsan\",\"age\":21}"
* 使用google GSON解析单个JSON对象

* */
public void parseObjectData(String jsonData){
try{
Gson gson = new Gson();
User user = gson.fromJson(jsonData, User.class);
System.out.print("name --> " + user.getName());
System.out.println(";age -- > " + user.getAge());
}catch(Exception e){
e.printStackTrace();
}
}


/*
* example:"{\"name\":\"zhangsan\",\"age\":21}"
* 使用google GSON解析多个JSON对象

* */
public void parseObjectsData(String jsonData){
try{
Type type = (Type) new TypeToken<LinkedList<User>>(){}.getType();
Gson gson = new Gson();

LinkedList<User> users = gson.fromJson(jsonData, type);

for(Iterator<User> iterator = users.iterator(); iterator.hasNext();){
User user = iterator.next();
System.out.print("name --> " + user.getName());
System.out.println(";age -- > " + user.getAge());
}

}catch(Exception e){
e.printStackTrace();
}
}



}

主布局文件main.java:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >


    <TextView
        android:id="@+id/myText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
    
    <Button 
        android:id="@+id/myButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/myText"
        android:text="开始解析JSON"/>


</RelativeLayout>


点击解析JSON按钮后,会在Logcat中输出解析出来的数据

0 0