什么是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 {
@Override
protected 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 exception
Log.v("json", "-->Exception Exception");
}
}
}