json学习(java篇)
前一个小项目中用到了json:服务器返回的数据有xml或者json格式的数据,由于json简洁、轻量、高性能等优点,我们当时就采用的是json格式的数据。上个月没有心情学习啊,就索性多玩会儿,不过今年得有个目标,至少博客得多写写,质量上也希望比前几个月有所提升,那就开始吧。
先从json基础知识开始学起。官网不用多说了吧:json.org。
json是一种轻量型的数据交互格式。它很容易被人们阅读和书写,也易于机器解析和生成。它给予javasrcipt,是一种文本格式的、完全独立的语言。
json中有两种数据结构:
- 名称/值对的集合(你也可以简单理解为Map)。在不同的语言,这是作为一个对象,记录,结构,字典,哈希表,键列表或关联数组实现。
- 值的有序列表(通常是Array)。在大多数语言中,实现由一个数组,向量,列表,或序列。
这些都是通用的数据结构。几乎所有的现代编程语言都支持这种或那种形式。也正是如此,使json格式的数据可以在不同的编程语言中交互。
在JSON中,他们采取这些形式:
一个json对象是一个无序的名称/值对。一个对象以 ‘ { ’ 开始,以 ‘ } ’ 结束。每个名称后跟':'(冒号),名称/值对的分隔符为‘,’(逗号)。
一个json对象如下:
有上图可以看出:名称/值对中的名称必须是String型的数据结构,那么value又有什么类型的数据结构呢?
这里得说说array数据类型了,也就是上面的所说的“值的有序列表”。这个数组以‘ [ ’(左括号)开始,以 ’ ] ‘结束,以','(逗号)作为分隔符号。
解释下value里面的string,number,null这个三个元素。
string是由0个或多个Unicode字符组成,由双引号包裹,非常想c或java中的字符串。number在c或java中都有这样的数据类型就不多说了。但是null又是什么呢?null是json里的一个特殊的value,它可以在你需要的时候转化成任何数据类型。
废话不多说,举例吧:
//Merge two JSON objects
JSONObject obj1 = new JSONObject();
obj1.put("name","foo");
obj1.put("num",new Integer(100));
obj1.put("balance",new Double(1000.21));
JSONObject obj2 = new JSONObject();
obj2.put("is_vip",new Boolean(true));
obj2.put("nickname",null);
obj2.putAll(obj1);
System.out.print(obj2);
String json = "{"
+ " \"query\": \"Pizza\", "
+ " \"locations\": [ 94043, 90210 ] "
+ "}";
JSONObject object = (JSONObject) new JSONTokener(json).nextValue();
String query = object.getString("query");
JSONArray locations = object.getJSONArray("locations");