您的位置:首页 > 理论基础 > 计算机网络

Android网络编程之JSON、GSON

2016-03-22 23:56 645 查看

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());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息