一个APP在从服务器获取数据通常通过xml和json的两种文本来传输数据,就目前来看,JSON简单的语法格式和清晰的层次结构明显要比 XML 容易阅读,并且在数据交换方面,由于 JOSN 所使用的字符要比 XML 少得多,可以大大得节约传输数据所占用得带宽。
在这里面向大家介绍一下json的解析。
1>在工程里面我创建了一个抽象的工具类GsonTool,在这里面写了两个方法,一个是将JSON数据读取后将转化为字符串,另一个是将转化的字符串和需要的键值、目标值读取后返回所需要的值。
2>里面涉及的数据转化比较麻烦,但是具体思想还是比较简单的,就是for循环遍历数据进行比较。
3>数据转化主要是利用了JSONObject和JSONArry。
(1)GsonTool类的java代码:
package com.example.app_switchbutton;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
/**
* Created by 尽途 on 2017/5/26.
*/
public class GsonTool {
/**
* 将json格式转化为字符串格式并返回
* @param is
* @return
* @throws Exception
*/
public static String readStream(InputStream is) throws Exception{
ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int len=0;
while ((len=is.read(buffer))!=-1){
byteArrayOutputStream.write(buffer,0,len);
}
is.close();
byteArrayOutputStream.close();
String content=new String(byteArrayOutputStream.toByteArray());
return content;
}
/**
* 通过输入gson字符串和键值、目标值来从输入gson字符串中寻找需要的值
*/
public String readGsonString(String string,String key,String obj){
String Str=null;
try {
JSONObject jsonObject=new JSONObject(string);
JSONArray jsonArray=jsonObject.getJSONArray(key);
for (int i=0;i<jsonArray.length();i++){
JSONObject object=jsonArray.getJSONObject(i);
Str=object.getString(obj);
}
}catch (JSONException e){
e.printStackTrace();
}
return Str;
}
}
(2)、使用方法,以天气信息json数据为模板来试验一下,
InputStream inputstream=connection.getInputStream();//从网上获取json数据流
String content=JsonTool.readStream(inputstream);//将json数据转化为字符串
String weather=JsonTool.readJsonString(content,"live","weather");//获得值
在这里有些事情需要注意,键值是什么?(用一个天气信息的json数据来展示一下)
只要将这些一一对应好就没有问题了,最后会返回目标值对应的后面的值(本例中的“晴”)。