一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 – Json.org
更多的有关json数据格式可以参加json的官网,http://www.json.org/json-zh.html
1、JSON vs XML
- JSON和XML的数据可读性基本相同
- JSON和XML同样拥有丰富的解析手段
- JSON相对于XML来讲,数据的体积小
- JSON与JavaScript的交互更加方便
- JSON对数据的描述性比XML较差
- JSON的速度要远远快于XML
2、编写方式http://blog.csdn.net/mfc2003/article/details/38584845
- 简单的一个 { ,,,,}
- 里面有数组 { , [{,,},{,,}],}
- 直接一个数组
- 数组里有数组
3、解析json数据格式
这里将使用两种json的解析库来对我们的json数据格式进行解析以及生成我们的json数据格式。
1.json-lib(http://json-lib.sourceforge.net/)
使用json-lib来进行解析,我们需要引入第三方的包,因为json-lib分为了两个版本,一个版本是针对于jdk1.3的,一个版本是针对于jdk1.5的,这里我们下载jdk1.5的这个json-lib包,其中还需要引入其他的几个jar包:
4、android2.3提供的json解析类
android的json解析部分都在包org.json下,主要有以下几个类:
- JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。它对外部(External: 应用toString()方法输出的数值)调用的响应体现为一个标准的字符串(例如:{"JSON": "Hello, World"},最外被大括号包裹,其中的Key和Value被冒号":"分隔)。其对于内部(Internal)行为的操作格式略微,例如:初始化一个JSONObject实例,引用内部的put()方法添加数值:new JSONObject().put("JSON", "Hello, World!"),在Key和Value之间是以逗号","分隔。Value的类型包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object 。
- JSONStringer:json文本构建类 ,根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。其最大的优点在于可以减少由于 格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。
- JSONArray:它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔(例如: [value1,value2,value3],大家可以亲自利用简短的代码更加直观的了解其格式)。这个类的内部同样具有查询行为, get()和opt()两种方法都可以通过index索引返回指定的数值,put()方法用来添加或者替换数值。同样这个类的value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object。
- JSONTokener:json解析类
- JSONException:json中用到的异常
5、解析json
1 public class Person { 2 3 private String name; 4 private int age; 5 6 public String getName() { 7 return name; 8 } 9 10 public void setName(String name) { 11 this.name = name; 12 } 13 14 public int getAge() { 15 return age; 16 } 17 18 public void setAge(int age) { 19 this.age = age; 20 } 21 22 @Override 23 public String toString() { 24 return name + ":" + age; 25 } 26 }
DEMO中Person类
5.1 JSONTokener配合JSONArray/JSONObject解析json对象
1 public static List<Person> parseJson(String json) { 2 List<Person> persons = new ArrayList<Person>(); 3 Person person; 4 JSONTokener jsonTokener = new JSONTokener(json); 5 JSONArray jsonArr = (JSONArray) jsonTokener.nextValue(); 6 JSONObject jsonObj; 7 for (int i = 0; i < jsonArr.size(); i++) { 8 jsonObj = jsonArr.getJSONObject(i); 9 // 从json中提取Person属性 10 person = new Person(); 11 String name = jsonObj.getString("name"); 12 int age = jsonObj.getInt("age"); 13 person.setName(name); 14 person.setAge(age); 15 16 persons.add(person); 17 } 18 return persons; 19 }
5.2 GSON方式
GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。使用GSON,可以很容易的将一串JSON数据转换为一个Java对象,或是将一个Java对象转换为相应的JSON数据。
GSON的两个重要方法
在GSON的API中,提供了两个重要的方法:toJson()和fromJson()方法。其中,toJson()方法用来实现将Java对象转换为相应的JSON数据,fromJson()方法则用来实现将JSON数据转换为相应的Java对象。
toJsonString():
1 private static String toJSONString() { 2 Gson gson = new Gson(); 3 List<Person> persons = new ArrayList<Person>(); 4 for (int i = 0; i < 10; i++) { 5 Person p = new Person(); 6 p.setName("name" + i); 7 p.setAge(i * 5); 8 persons.add(p); 9 } 10 return gson.toJson(persons); 11 }
toJSONString()
1. 解析json对象
1 public static Person parseJsonByGson(String json){ 2 Person person = new Person(); 3 Gson gson = new Gson(); 4 person = gson.fromJson(json, Person.class); 5 return person; 6 }
2. 解析json数组
1 public static List<Person> parseJsonArrByGson(String json) { 2 List<Person> persons = new ArrayList<Person>(); 3 Gson gson = new Gson(); 4 Type tp = new TypeToken<List<Person>>() {}.getType(); 5 persons = gson.fromJson(json, tp); 6 return persons; 7 }
http://www.cnblogs.com/xiaoluo501395377/p/3446605.html
http://892848153.iteye.com/blog/1835876