JSON

android json解析及简单例子

字号+ 作者:H5之家 来源:H5之家 2016-01-16 16:33 我要评论( )

JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备

JSON的定义:

       一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 – Json.org

JSON Vs XML

1.JSON和XML的数据可读性基本相同

2.JSON和XML同样拥有丰富的解析手段

3.JSON相对于XML来讲,数据的体积小

4.JSON与JavaScript的交互更加方便

5.JSON对数据的描述性比XML较差

6.JSON的速度要远远快于XML


android2.3提供的json解析类 

android的json解析部分都在包org.json下,主要有以下几个类: 

或者默认值JSONObject.NULL object 。

JSONStringer:json文本构建类 ,根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。其最大的优点在于可以减少由于 格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。

JSONTokener:json解析类 
JSONException:json中用到的异常 
JSONObject, JSONArray来构建json文本  

代码  


getType和optType api的使用  
getType可以将要获取的键的值转换为指定的类型,如果无法转换或没有值则抛出JSONException 
optType也是将要获取的键的值转换为指定的类型,无法转换或没有值时返回用户提供或这默认提供的值 

代码  


除了上面的两个类,还可以使用JSONStringer来构建json文本  

Java代码  


json文本解析类JSONTokener  
按照RFC4627规范将json文本解析为相应的对象。 

对于将json文本解析为对象,只需要用到该类的两个api:  
构造函数 
public Object nextValue(); 

代码  

其它的api基本就是用来查看json文本中的文本的 

代码  

      以下是一个标准的JSON请求实现过程:

HttpPost request = new HttpPost(url); // 先封装一个 JSON 对象 JSONObject param = new JSONObject(); param.put("name", "rarnu"); param.put("password", "123456"); // 绑定到请求 Entry StringEntity se = new StringEntity(param.toString()); request.setEntity(se); // 发送请求 HttpResponse httpResponse = new DefaultHttpClient().execute(request); // 得到应答的字符串,这也是一个 JSON 格式保存的数据 String retSrc = EntityUtils.toString(httpResponse.getEntity()); // 生成 JSON 对象 JSONObject result = new JSONObject( retSrc); String token = result.get("token");
        下面这个是自己修改别人的小例子,主要是加一些注释和讲解,这个例子主要是使用android进行json解析。
单数据{'singer':{'id':01,'name':'tom','gender':'男'}} 多个数据{"singers":[ {'id':02,'name':'tom','gender':'男'}, {'id':03,'name':'jerry,'gender':'男'}, {'id':04,'name':'jim,'gender':'男'}, {'id':05,'name':'lily,'gender':'女'}]}         下面的类主要是解析单个数据parseJson()和多个数据的方法parseJsonMulti():
public class JsonActivity extends Activity {  /** Called when the activity is first created. */  private TextView tvJson;  private Button btnJson;  private Button btnJsonMulti;  @Override  public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.main);  tvJson = (TextView) this.findViewById(R.id.tvJson);  btnJson = (Button) this.findViewById(R.id.btnJson);  btnJsonMulti = (Button) this.findViewById(R.id.btnJsonMulti);  btnJson.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {  // url  // String strUrl = ":8080/AndroidServer/JsonServlet";  String strUrl = ServerPageUtil.getStrUrl(UrlsOfServer.JSON_SINGER);  //获得返回的Json字符串  String strResult = connServerForResult(strUrl);  //解析Json字符串  parseJson(strResult);  }  });  btnJsonMulti.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {  String strUrl = ServerPageUtil.getStrUrl(UrlsOfServer.JSON_SINGERS);  String strResult = connServerForResult(strUrl);  //获得多个Singer  parseJsonMulti(strResult);  }  });  }  private String connServerForResult(String strUrl) {  // HttpGet对象  HttpGet httpRequest = new HttpGet(strUrl);  String strResult = "";  try {  // HttpClient对象  HttpClient httpClient = new DefaultHttpClient();  // 获得HttpResponse对象  HttpResponse httpResponse = httpClient.execute(httpRequest);  if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {  // 取得返回的数据  strResult = EntityUtils.toString(httpResponse.getEntity());  }  } catch (ClientProtocolException e) {  tvJson.setText("protocol error");  e.printStackTrace();  } catch (IOException e) {  tvJson.setText("IO error");  e.printStackTrace();  }  return strResult;  }  // 普通Json数据解析  private void parseJson(String strResult) {  try {  JSONObject jsonObj = new JSONObject(strResult).getJSONObject("singer");  int id = jsonObj.getInt("id");  String name = jsonObj.getString("name");  String gender = jsonObj.getString("gender");  tvJson.setText("ID号"+id + ", 姓名:" + name + ",性别:" + gender);  } catch (JSONException e) {  System.out.println("Json parse error");  e.printStackTrace();  }  }      //解析多个数据的Json private void parseJsonMulti(String strResult) {  try {  JSONArray jsonObjs = new JSONObject(strResult).getJSONArray("singers");  String s = "";  for(int i = 0; i < jsonObjs.length() ; i++){  JSONObject jsonObj = ((JSONObject)jsonObjs.opt(i))  .getJSONObject("singer");  int id = jsonObj.getInt("id");  String name = jsonObj.getString("name");  String gender = jsonObj.getString("gender");  s +=  "ID号"+id + ", 姓名:" + name + ",性别:" + gender+ "\n" ;  }  tvJson.setText(s);  } catch (JSONException e) {  System.out.println("Jsons parse error !");  e.printStackTrace();  }  }  } 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • php CI 实战教程:[5]用curl获取json并解析

    php CI 实战教程:[5]用curl获取json并解析

    2016-02-26 17:00

  •  JSON入门级学习总结-JSON数据结构

    JSON入门级学习总结-JSON数据结构

    2016-02-25 11:05

  • Android解析Json速度最快的库:json

    Android解析Json速度最快的库:json

    2016-02-13 18:00

  • JavaScript转换与解析JSON方法实例详解第1/2页

    JavaScript转换与解析JSON方法实例详解第1/2页

    2016-02-10 21:25

网友点评
j