之前学习了解析XML文件的两种方法。
接下来学习Json解析网络资源(使用Json得去Google官网下载GSON包然后导入)
Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率.
从结构上看,所有的数据(data)最终都可以分解成三种类型:
第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。
第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海"。
第三种类型是映射(mapping),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比如"首都:北京"。
Json的规格非常简单,只用一个页面几百个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升级,因为该规定的都规定了。
1) 并列的数据之间用逗号(",")分隔。
2) 映射用冒号(":")表示。
3) 并列数据的集合(数组)用方括号("[]")表示。
4) 映射的集合(对象)用大括号("{}")表示。
——————————————————————————————————————————————————————————————————————-
先同解析XML文件相似,创建一个JAVABEAN student类:
public class Student {
private String name;
private int age;
private String id;
public Student() {
super();
}
public Student(String name, int age, String id) {
super();
this.name = name;
this.age = age;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}使用GSON解析JSON对象:
public class JsonUtils {
public static List<Student> parseStudentFromJson(String data) {
Type listType = new TypeToken<LinkedList<Student>>() {
}.getType();
Gson gson = new Gson();<span style="white-space:pre"> </span>//如果要处理的JSON字符串只包含一个JSON对象,则可以直接使用fromJson获取一个student对象:
LinkedList<Student> list = gson.fromJson(data, listType);
return list;
}
}从网络上获取JSON,实际是获取字符串:
public class HttpUtils { //从服务器端下载到Json数据,也就是个字符串
public static String getData(String url) throws Exception {
StringBuilder sb = new StringBuilder();
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
if (httpEntity != null) {
InputStream instream = httpEntity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(
instream));
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
return sb.toString();
}
return null;
}接下来是主函数:
public class MainActivity extends Activity {
private TextView textView;
private List<Student> list;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView = (TextView) findViewById(R.id.textView);
String data = null;
try {
data = HttpUtils
.getData("http://10.16.12.165:8080/JsonTest/JsonTestServlet");
} catch (Exception e) {
e.printStackTrace();
}
String result = "";
list = JsonUtils.parseStudentFromJson(data);
for (Student s : list) {
result += "name: " + s.getName() + " " + "age: " + s.getAge()
+ " " + "id: " + s.getId() + "\n";
}
textView.setText(result);
}
}利用GSON解析JSON的另一种方法:
通过获取JsonReader对象解析JSON数据:
String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]";
try{
<span style="white-space:pre"> </span>JsonReader reader = new JsonReader(new StringReader(jsonData));
<span style="white-space:pre"> </span>reader.beginArray();
<span style="white-space:pre"> </span>while(reader.hasNext()){
<span style="white-space:pre"> </span>reader.beginObject();
<span style="white-space:pre"> </span>while(reader.hasNext()){
<span style="white-space:pre"> </span>String tagName = reader.nextName();
<span style="white-space:pre"> </span>if(tagName.equals("username")){
<span style="white-space:pre"> </span>System.out.println(reader.nextString());
<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>else if(tagName.equals("userId")){
<span style="white-space:pre"> </span>System.out.println(reader.nextString());
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>reader.endObject();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>reader.endArray();
}
catch(Exception e){
<span style="white-space:pre"> </span>e.printStackTrace();
}
本文介绍了如何使用Java的GSON库解析JSON数据,包括解析JSON对象、从网络获取JSON数据及JSON数据的两种解析方法。文章还详细解释了JSON数据的基本结构和规则,以及如何将JSON数据转换为JavaBean。
2295

被折叠的 条评论
为什么被折叠?



