Json数据结构


什么事Json(对于JSON更多详细解释可以看Json的官方网站:http://www.json.org/):

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming LanguageStandard 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:

Json数据结构 - cherrychen8811 - cherrychen8811的博客
步骤:a.要用的Json要导入一个gson-2.1.jar包,如果是开发Android3.0以上的版本的话是可以不用导入的,Android会自带的
b.创建一个JsonUtils类,该类是一个解析Json的工具类,里面包含了解析Json的方法
c.在Activity里调用JsonUtils里的解析Json的方法,进行解析
在JsonUtils里面:

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();
}
}
}
在Activity里面:

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);
}
});
}
}
Json示例二:
调用google提供的Json,有一个很好功能:他可以把解析的数据加载到对应的实体类里面:
Json数据结构 - cherrychen8811 - cherrychen8811的博客
步骤:与上面基本一样,但是多了个创建一个实体类
在User.java里面:

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;
}
}
在JsonUtils里面:

public class JsonUtils {
//当Json数据里面的对象只有一个的时候调用该方法
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());
}
}
}
在Activity里面:

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值