Json 知识

一、定义

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

猜你喜欢

转载自blog.csdn.net/mahuicool/article/details/80498289