什么事Json(对于JSON更多详细解释可以看Json的官方网站:http://www.json.org/):
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
JSON建构于两种结构:
- “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
- 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
JSON具有以下这些形式:
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
比如说:[{"name":"zhangsan","sex":"man"}{"name":"lisi","sex"woman“}]
Json数据结构特点相对于XML的比较
1.Json和xml的可读性基本相同
2.Json和xml同样拥有丰富的解读手段
3.Json相对于xml来讲体积更小,这样的话在数据传输时就更快
4.Json与JavaScript交互更加方便
5.Json对数据的描述性相对差
Json示例1:
![JASON数据结构 Json数据结构 - cherrychen8811 - cherrychen8811的博客](http://img3.ph.126.net/5lTpgPAOAiR4G69UvEBF5A==/3081869520022260243.jpg)
public class JsonUtils {
public void parseJson(String jsonDate){
//如果需要解析JSON数据,首先需要生成一个JsonReader对象
//(在创建这个对象之前需要导入一个gson-2.1.jar的包,因为在Android3.0之前的API中包含JsonReader对象)
JsonReader reader = new JsonReader(new StringReader(jsonDate));
try {
//开始解析数组
reader.beginArray();
//如果"["后面还有东西的话
while(reader.hasNext()){
//开始解析对象
reader.beginObject();
//如果"{"后面还有东西的话
while(reader.hasNext()){
//用一个tagName来存放对象属性的键
String tagName = reader.nextName();
if(tagName.equals("name")){
System.out.println("name--->"+reader.nextString());
}else if(tagName.equals("sex")){
System.out.println("sex--->"+reader.nextString());
}else if(tagName.equals("age")){
System.out.println("age--->"+reader.nextInt());
}
}
//对象解析完毕
reader.endObject();
}
//数组解析完毕
reader.endArray();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class JsonTestActivity01 extends Activity {
private Button jsonTestBtn = null;
private static final String jsonString = "[{\"name\":\"张三\",\"sex\":\"男\",\"age\":10},{\"name\":\"李四\",\"sex\":\"女\",\"age\":11}]";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main01);
jsonTestBtn = (Button)findViewById(R.id.jsonTest_btn1_id);
jsonTestBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
JsonUtils utils = new JsonUtils();
utils.parseJson(jsonString);
}
});
}
}
![JASON数据结构 Json数据结构 - cherrychen8811 - cherrychen8811的博客](http://img3.ph.126.net/bWt9UZ0O9u26fp6cXsyDXw==/1009932216455123213.jpg)
public class User {
private String name;
private String sex;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class JsonUtils {
public void parseJsonToUser(String jsonDate){
Gson gson = new Gson();
User user = gson.fromJson(jsonDate, User.class);
System.out.println("name--->"+user.getName());
System.out.println("sex--->"+user.getSex());
System.out.println("age--->"+user.getAge());
}
//当Json数据里的对象多于一个的时候(即是数组的时候)调用该方法
public void parseJsonToUsers(String jsonDate){
//得到一个Type对象;TypeToken>(){}之所以要加{},是因为TypeToken是一个抽象类
Type listType = new TypeToken>(){}.getType();
//创建一个Gson对象(Google的Jons解析API)
Gson gson = new Gson();
//通过Gson的.fromJson(jsonDate, listType)方法将Json数据解析并且转换成user实体对象的集合
LinkedList users = gson.fromJson(jsonDate, listType);
//通过遍历器,将解析后的user实体对象集合遍历,得到每项的值
for (Iterator iterator = users.iterator(); iterator.hasNext();) {
User user = (User) iterator.next();
System.out.println("name--->"+user.getName());
System.out.println("sex--->"+user.getSex());
System.out.println("age--->"+user.getAge());
}
}
}
public class JsonTest02Activity extends Activity {
private Button jsonTestBtn1 = null;
private Button jsonTestBtn2 = null;
private static final String jsonString1 = "{\"name\":\"张三\",\"sex\":\"男\",\"age\":10}";
private static final String jsonString2 = "[{\"name\":\"张三\",\"sex\":\"男\",\"age\":10},{\"name\":\"李四\",\"sex\":\"女\",\"age\":11}]";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
jsonTestBtn1 = (Button)findViewById(R.id.testJson1_btn_id);
jsonTestB