android开发之JSON数据解析
android开发之JSON数据解析
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;
}
}
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();
}
}
}
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>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。