http://www.apkbus.com/forum.php?mod=viewthread&tid=13882
Android 平台上处理 Internet 上两种最常见的数据格式 — XML 和JSON,Feed 数据可以以 XML 和 JSON 格式从 Twitter 上获取 ,XML 随处可见,但是对于 Android 程序员来说并不是一个明智的选择,特别是,如果数据结构成为与 XML 结构伴随着的数据爆炸的牺牲品。像 Android 这样通常在蜂窝数据网络(cellular data network)上工作的资源受限平台不能存储和解析大量 XML 数据。然而,如果特殊编程任务要求文本和二进制数据交换,那么 XML 是一个可靠的选择。
越来越多的 Internet API 供应商提供 JSON 作为一种数据格式。JSON 在 Ajax 网页编程社区中享有盛名。Ajax 技术使 web 页面可以动态地更新,只更新所选区域的数据而不用更新整个页面。由于较少数据被传送 — 更重要的是,因为较少的数据被解析且显示在浏览器窗口 — 使用 AJAX 的应用程序比起传统 web 应用程序能够提供一个更好的用户体验。
XML 以其冗长而著名,而 JSON 也因其难度而闻名。JSON 对象其构造是一个键 :值 对,对象元素之间用逗号隔开,每个对象被包含在一对大括号 {} 内。一组对象数组包含在一对方括号中。这是将数据行从一个数据库发送到一个对象数组的一种常见方法。其中每个数组元素对应数据库中的一行,每个对象属性代表数据的一列。
总的来说,JSON 是:
- 一种数据交换格式。
- JavaScript 对象作为字符串编码的一种方式。
- 仅限于文本和数值。二进制值是明确不允许的。JSON 没有 CDATA 对应模式。
- 在数据可读性费用方面、就数据大小而言比 XML 更经济。
- 越来越多的 API 供应商将其作为一种选择,例如 Twitter。
-
像之前显示的 XML 例程一样,从文件中读取数据到内存中,转换成一个 java.lang.String,然后解析成 JSONArray。要注意的是,正如此例所示,一个特殊的字符串能直接解析成一个数组,或者也可以直接解析成一个 JSONObject。因为 Twitter 数据是一个对象数组,整体解析成一个数组然后按顺序逐个访问对象是明智的选择。void examineJSONFile() { try { String x = ""; InputStream is = this.getResources().openRawResource(R.raw.jsontwitter); byte [] buffer = new byte[is.available()]; while (is.read(buffer) != -1); String jsontext = new String(buffer); JSONArray entries = new JSONArray(jsontext); x = "JSON parsed.\nThere are [" + entries.length() + "]\n\n"; int i; for (i=0;i<entries.length();i++) { JSONObject post = entries.getJSONObject(i); x += "------------\n"; x += "Date:" + post.getString("created_at") + "\n"; x += "Post:" + post.getString("text") + "\n\n"; } tvData.setText(x); } catch (Exception je) { tvData.setText("Error w/file: " + je.getMessage()); } }
该方法的流程简单明了,一旦数据被解析,代码建立一个类似于 XML 解析器处理程序方法的字符串表示。有趣的是数据将由您来管理;您不需要建立额外内存结构来容纳数据,同样地,应用程序预先就知道在 JSONArray 中有多少个条目(在这个例子中是 20 个)。
尽管 JSON 解析在编程上简单得多,但并不是没有代价的。它要增加内存消耗,在处理之前整体读取数据流并进行存储。相反的,SAX XML 方法仅使用相关数据。另外,如果解析特殊 JSON 对象的内存是足够的,则这个方法将很受应用程序欢迎,特别是,几乎不需要使用 DOM 的应用程序。
比起 JSON 方法,XML 方法更快、内存受限更小 — 但是以增加复杂性为代价。