一、定义
JSON:JavaScript Object Notation(JavaScript 对象表示法)。
JSON:是轻量级的文本数据交换格式。
JSON:JSON独立于语言:JSON使用JavaScript语言来描述数据对象,但是JSON仍然独立于语言和平台,JSON解析器和JSON库支持许多不同的编程语言。
JSON:JSON具有自我描述性,更容易理解。
Json实例:
{ "sites": [ { "name":"百度" , "url":"www.baidu.com" }, { "name":"google" , "url":"www.google.com" }, { "name":"微博" , "url":"www.weibo.com" } ] }
这个sites是包括三个站点信息(对象)的数组
与XML的不同之处
1、没有结束标签。
2、更短。
3、读写速度更快
4、能够使用内建的JavaScript eval()方法进行解析。
5、使用数组。
6、不适用保留字。
二、JSON语法
JSON语法是JavaScript语法的子集。
JSON语法规则:
1、数据在名称/值对中。
2、数据由逗号分隔。
3、大括号保存对象。
4、中括号保存数组。
JSON名称/值对
JSON数据的书写格式:名称/值对。
名称/值对包括:字段名称(在双引号内),后面是冒号,然后是值(在双引号内)。
"name":"Henry"
这很容易理解,这条语句等价于JavaScript语句
name="Henry"
JSON的值
JSON的值可以是:
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true或false)
数组(在中括号中)
对象(在大括号中)
null
JSON数字
{"age":30}
JSON对象
对象在{}中书写:
对象可以包括多个键值对
{"name":"Henry","age":"30"}
JSON数组
JSON数组在[]中书写:
{"sites":[ {"name":"Henry","age":"30"}, {"name":"Jason","age":"25"}, {"name":"Matthew","age":"24"} ] }
上述例子表示了,对象sites是包含了三个对象的数组,每个对象代表一个人,包括姓名、年龄。
JSON布尔值
{"isAble":true}
JSON null
{"name":null}
Android提供的JSON解析类
JSONObject:Json对象,可以完成Json字符串与Java对象的相互转换。
JSONArray:Json数组,可以完成Json字符串与Java集合或对象的相互转换。
JSONStringer:Json文本构建类,这个类可以帮助快速和便捷的创建JSON text,每个JSONStirnger实体,只能对应创建一个JSON text。
JSONTokener:Json解析类。
JSONException:Json异常。
简单的JSON解析实例
自己写一个字符串,模拟JSON数据,解析完成后显示Toast显示出来。
1、首先创建一个Bean(Movie)类,并添加geter、setter以及构造方法。
public class Movie { private String name; private String director; private String country; public Movie(String name, String director, String country) { this.name = name; this.director = director; this.country = country; } public Movie() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDirector() { return director; } public void setDirector(String director) { this.director = director; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } }
2、创建一个模拟JSON数据的字符串
private static final String Json="{\"movie\":[{\"name\":\"泰坦尼克号\",\"director\":\"卡梅隆\",\"country\":\"美国\" }," + "{\"name\":\"侏罗纪公园\",\"director\":\"斯皮尔伯格\",\"country\":\"美国\" }," + "{\"name\":\"七武士\",\"director\":\"黑泽明\",\"country\":\"日本\" }]}";
3、通过JSONObject、JSONArray这两个类把JSON数据解析出来,然后通过Movie的set方法,把数据保存到Movie对象中,最后通过Toast显示出来。
private void parseJson(String json) throws JSONException { JSONObject object=new JSONObject(json); //通过JASONObject类获取Json数据中的“movie”数组,并赋值给JSONArray对象 JSONArray array=object.getJSONArray("movie"); JSONObject[] ja=new JSONObject[array.length()]; List<Movie> movies=new ArrayList<>(); for(int i=0;i< array.length();i++){ //通过JSONArray的get方法,获得数组中存储的单个JASONObject对象 ja[i]= (JSONObject) array.get(i); Movie m=new Movie(); //通过JSONObject的get方法获取保存的对应键的值 String name=ja[i].getString("name"); String director=ja[i].getString("director"); String country=ja[i].getString("country"); m.setName(name); m.setDirector(director); m.setCountry(country); movies.add(m); // System.out.println("name:"+ja[i].getString("name")+" director:"+ja[i].getString("director")+" country:"+ja[i].getString("country")); } Toast.makeText(MainActivity.this,"电影名:"+movies.get(0).getName()+" 导演:"+movies.get(0).getDirector()+" 国家:"+movies.get(0).getCountry()+"" + "\n 电影名:"+movies.get(1).getName()+" 导演:"+movies.get(1).getDirector()+" 国家:"+movies.get(1).getCountry()+ "\n 电影名:"+movies.get(2).getName()+" 导演:"+movies.get(2).getDirector()+" 国家:"+movies.get(2).getCountry(),Toast.LENGTH_LONG).show(); }
参考:http://www.runoob.com/json/json-syntax.html