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

android开发之JSON数据解析

2014-12-17 13:23 351 查看

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中输出解析出来的数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: