Android简单的JSON解析(一)

来源:互联网 发布:番茄钟软件 编辑:程序博客网 时间:2024/05/27 01:28

什么是JSON?

这是来自百度百科的扯淡:

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(网络传输速度快).

Json有两种数据格式.

一种是以(Key/Value)键值对应的形式的无序jsonObject对象,一个对象是以"{"为开始,“}”为结束,每个"key"后跟一个":"(冒号)   key/value之间用","(逗号)分隔,例如:

{"name":"myu",“addrs”:"beijing"},这就是一个简单的json对象,这种数据格式中的Key必须是string类型,value可以是string,array,number,object等类型.

第二种数据格式是有序的value集合,这种形式被称为jsonArray,里面的数组就是value的有序集合.一个数组以"["开始 "]"结束,值与值之间用","分隔.例如:

[1234,5678]


事实上,Json,XML,Html这三种数据格式一般为服务器返回的格式.就Json和XML而言:

相同点:1、两者的数据可读性基本相同
                 2、两者拥有同样丰富的解析手段
异同点:1、json的数据体积更小
        2、json与JS的交互更加方便
        3、json的解析速度更快
        4、xml对数据的描述性更好
        5、轻/重量级方面的区别:JSON只提供了整体解析方案,而这种方法只在解析较少的数据时才能起到良好效果;
        而XML提供了对大规模数据的逐步解析方案,这种方案很适用于对大量数据的处理。对于应用程序而言,只
        要整体数据可以一次性读取和写入的,都只能算是轻量级应用


Android中JSON几个常用的类:(来自Android官方文档API19)

JSONArray A dense indexed sequence of values. 
JSONObject A modifiable set of name/value mappings. 
JSONStringer Implements toString() and toString(). 
JSONTokener Parses a JSON (RFC 4627) encoded string into the corresponding object. 

每个类具体的作用及其中的方法大家可以先参考Google提供的文档,这里我们有时间再去详细分析


以下是自己写的一个小Demo,作用是解析一个简单的Json格式,并将其数据转化成基本类型:

package com.example.myjsondemo;import org.json.JSONArray;import org.json.JSONObject;import org.json.JSONTokener;import android.os.Bundle;import android.util.Log;import android.app.Activity;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);String json = "{" + "  \"query\": \"Pizza\", "+ "  \"locations\": [ 94043, 90210 ] " + "}";try {// 通过JSONTokener的nextValue()获得JSONObject对象JSONObject object = (JSONObject) new JSONTokener(json).nextValue();// 获取"query"键对应的value值String query = object.getString("query");Log.v("json", "-->query =" + query);// 返回索引对应的value值JSONArray locations = object.getJSONArray("locations");for (int i = 0; i < locations.length(); i++) {// 遍历JSONArray,取出Value值int id = locations.getInt(i);Log.v("json", "-->id =" + id);}} catch (Exception e) {// TODO: handle exceptionLog.v("json", "-->Exception Exception");}}}



0 0