Android网络编程之JSON、GSON
JSON(JavaScript Object Notation),它是一种轻量级的文本数据交换格式,类似于XML,但比XML更小、更快、更易解析。
代码示例如下:
public class Json extends Activity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_main);
textView = (TextView) findViewById(R.id.textView);
//将用来解析的JSON数据
String data = "{ \"Strings\" :{\"Strings1\":\"ONE\",\"Strings2\":\"TWO\"}," +
"\"Number\":[\"987654321\",\"123456789\"],"
+ "\"Int\":100}";
try {
//新建JSONObject对象,将字符串data转换为JSONObject对象
JSONObject mJSONObject = new JSONObject(data);
//进一步获得JSONObject对象
JSONObject Strings = mJSONObject.getJSONObject("Strings");
//取出Strings中名称为Strings1的值ONE
String str = Strings.getString("Strings1");
//获得JSONArray数组对象
JSONArray array = mJSONObject.getJSONArray("Number");
//取出Number中的第二个数组元素
int a = array.getInt(1);
textView.setText(str +" "+ a );
} catch (JSONException e) {
e.printStackTrace();
}
}
}
GSON:
谷歌提供的GSON开源库可以让JSON数据的工作变得更简单,不过GSON并没有被添加到Android官方的API中,因此如果想要使用这个功能的话,则必须下载一个GSON的Jar包并在添加到项目中。将其拷贝到项目的libs目录下,GSON库就会自动添加到项目中了。
比如一段JSON格式的数据如下所示:
{"name":"Tom","age":20}
那我们可以定义一个Person类,并加入name和age这两个字段,然后只需简单地调用如下代码就可以将JSON数据自动解析成一个Person对象了:
Gson gson = new Gson();
//jsonData为待解析的数据,Person.class为类
Person person = gson.formJson(jsonData,Person.class);
如果要解析的是一段JSON数组会稍微麻烦一点,借助TypeToken将期望解析成的数据类型传入到fromJson()方法中,如下所示:
List<Person> people = gson.fromJson(jsonData,new TypeToken<List<Person>>(){}.getType());
代码示例如下:
public class GsonTest extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_main);
//将用来解析的JSON数据
String data1 = "{ \"name\" :\"Tom\", \"age\":20 }";
Gson gson = new Gson();
Person person = gson.fromJson(data1, Person.class);
//取得数据
Log.d("GsonTest",person.getName() + " "+person.getAge());
//将用来解析的JSON数据
String data2 = "[{ \"name\" :\"Tom\", \"age\":20 }," +
"{ \"name\" :\"Jack\", \"age\":22 }]" ;
List<Person> people = gson.fromJson(data2, new TypeToken<List<Person>>() {
}.getType());
//打印出数据
for(int i = 0;i<people.size();i++){
Log.d("GsonTest",people.get(i).getName() + " "+people.get(i).getAge());
}
}
}