android之客户端与webservice的json方式交互

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
android之客户端与webservice的json方式交互
数据传输量 同等的数据,Json需要传输的数据更少,xml会相对多些,对关注数据量的机器来说,这点比较关键。
扩展性, 虽然xml打着可扩展的名号,但是还没有xml可以扩展,json不可以扩展的。
编码难度 xml跨平台对接更容易出问题,虽然工具很多,但是想在跨平台轻易的调通就不是很容易,而json手工就能写出 来,编码就简单很多。
由此可以看到,json非常易学易用。所以,在短短几年中,它就取代xml,成为了互联网上最受欢迎的数据交换 格式。
第一种方便简单:
最近在用Android调用Web服务,开始准备用WebService来调用,用jws的WebService方式写好后发现Android调 用的时候很多问题不知道咋解决了,后来发现有一个更好的办法,就是采用HttpPost来与后台交互。
下面就Baidu Nhomakorabea一下相关的JSON的操作:
不得不说,JSON 格式的确是非常美妙的,速度快而且简化了很多操作 在 Android 下,Android SDK 已经为我们封装好了整个与 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");
Json的规格非常简单,只用一个页面几百个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升 级,因为该规定的都规定了。
1) 并列的数据之间用逗号(",")分隔。
2) 映射用冒号(":")表示。
3) 并列数据的集合(数组)用方括号("[]")表示。
4) 映射的集合(对象)用大括号("{}")表示。
本文获取web项目返回的JSON数据。Android应用解析JSON比XML性能要好,但有许多项目仍然采用的是XML。
json:
21世纪初,Douglas Crockford寻找一种简便的数据交换格式,能够在服务器之间交换数据。当时通用的数据交 换语言是XML,但是Douglas Crockford觉得XML的生成和解析都太麻烦,所以他提出了一种简化格式,也就是 Json。
nnnnnnnnn //Like 是 JSONObject nnnnnnnnn "\"Like\" : {"+ nnnnnnnnnnn "\"Name\" : \"加内特\","+ nnnnnnnnnnn "\"Height\" : \"2.11cm\","+ nnnnnnnnnnn "\"Age\" : 35"+ nnnnnnnnn "},"+ nnnnnnn nnnnnnnnn //LikeList 就是一个 JSONObject nnnnnnnnn "\"LikeList\":" + nnnnnnnnnnnnn "{\"List\": " + nnnnnnnnnnnnn "["+ nnnnnnnnnnnnnnnnnnn //这里也是JSONObject nnnnnnnnnnnnnnnnn "{"+ nnnnnnnnnnnnnnnnnnn "\"Name\" : \"Rose\","+ nnnnnnnnnnnnnnnnnnn "\"Height\" : \"190cm\","+ nnnnnnnnnnnnnnnnnnn "\"Age\" : 23"+ nnnnnnnnnnnnnnnnn "},"+ nnnnnnnnnnnnnnnnn //这里也是JSONObject nnnnnnnnnnnnnnnnn "{"+ nnnnnnnnnnnnnnnnnnn "\"Name\" : \"科比\","+ nnnnnnnnnnnnnnnnnnn "\"Height\" : \"198cm\","+ nnnnnnnnnnnnnnnnnnn "\"Age\" : 33"+ nnnnnnnnnnnnnnnnn "}"+ nnnnnnnnnnnnn "]"+ nnnnnnnnnnnnn "}"+ nnnnnnnnn "}"; nnnnnnn nnnnnnn try { nnnnnnnnnnn JSONObject dataJson = new JSONObject(str); nnnnnnnnnnn Log.d(TAG, dataJson.getString("日期")); nnnnnnnnnnn nnnnnnnnnnn JSONObject nbaJson = dataJson.getJSONObject("Like"); nnnnnnn nnnnnnnnnnn Log.d(TAG, nbaJson.getString("Name")); nnnnnnnnnnn Log.d(TAG, nbaJson.getString("Height")); nnnnnnnnnnn Log.d(TAG, nbaJson.get("Age").toString()); nnnnnnnnnnn nnnnnnnnnnn JSONObject listJson = dataJson.getJSONObject("LikeList"); nnnnnnnnnnn JSONArray arrayJson = listJson.getJSONArray("List"); nnnnnnnnnnn nnnnnnnnnnn for(int i=0;i<arrayJson.length();i++) { nnnnnnnnnnnnnnn nnnnnnnnnnnnnnn JSONObject tempJson = arrayJson.optJSONObject(i); nnnnnnnnnnnnnnn nnnnnnnnnnnnnnn Log.d(TAG, tempJson.getString("Name")); nnnnnnnnnnnnnnn Log.d(TAG, tempJson.getString("Height")); nnnnnnnnnnnnnnn Log.d(TAG, tempJson.getString("Age").toString());nnn nnnnnnnnnnn } nnnnnnnnnnn nnnnnnnnnnn nnnnnnn } catch (JSONException e) { nnnnnnnnnnn System.out.println("Something wrong..."); nnnnnnnnnnn e.printStackTrace(); nnnnnnn } nnn } }
第二种传统型的:
package com.practice.json;
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;
import android.app.Activity; import android.os.Bundle; import android.util.Log;
json是轻量级的,它易于使用,并且容易转换到Java对象;并且客户端脚本js容易获取,Android已经支持JSON 的标准库。 xml一般用在数据量很大的情况下或者数据结构复杂的时候一般用xml
在Android开发中有一项非常广泛的应用:Android项目获取另一个web项目的资源或者返回的数据。
public class JsonDemo extends Activity { nnn /* nnnn * 解析JSON的例子,str保存的是JSON代码,解析后的数据在LogCat里输出 nnn */ nnn nnn String TAG = "Json message"; nnn nnn @Override nnn public void onCreate(Bundle savedInstanceState) { nnnnnnn super.onCreate(savedInstanceState); nnnnnnn setContentView(R.layout.main); nnnnnnn detectJSON(); nnn } nnn nnn private void detectJSON() { nnnnnnn String str = "{"+ nnnnnnn nnnnnnnnn "\"日期\" : \"2011-06-06\","+
上面四条规则,就是Json格式的所有内容。
比如,下面这句话:
"北京市的面积为16800平方公里,常住人口1600万人。上海市的面积为6400平方公里,常住人口1800万。"
写成json格式就是这样:
[ {"城市":"北京","面积":16800,"人口":1600}, {"城市":"上海","面积":6400,"人口":1800}
解码难度 这个我觉的json问题很大,特殊字符的处理让人很费心。xml,比如soap,一般不会有这个问题,只要考虑如何 编码就可以了,很罕见遇到因为特殊字符导致无法解析的情况。
那个更主流 JSON,虽然解码有时会遇到问题,但是看起来更简洁和容易调试。
另外推荐一个google的 protobuf,这个才是效率的王者,参考这里,google的很多服务都是用这个,包括 google market.
]
如果事先知道数据的结构,上面的写法还可以进一步简化:
[ ["北京",16800,1600], ["上海",6400,1800]
]
java 定义示例:
n private String jsonData1="[{\"name\":\"renhaili\",\"age\":20}, {\"name\":\"zhouxiaodong\",\"age\":21}]"; n private String jsonData2="{\"name\":\"xiong\",\"age\":18}";
相关文档
最新文档