首页 > 开发 > JavaScript > 正文

json解析

2020-03-22 18:05:44
字体:
来源:转载
供稿:网友
  • android开发中,与服务器交互80%是通过json方式传输数据,JSON 也是基于纯文本的数据格式,JSON具有跨平台的优势,相对xml,json解析起来更方便,简单,解析数据所消耗的流量也会比xml少,而且json有一些好的第三方库文件,已为开发者封装好了,

    JSON语法规则:

    • 数据在名称/值对中
    • 数据由逗号分隔
    • 花括号保存对象
    • 方括号保存数组

      JSON 名称/值对

      JSON 数据的书写格式是:名称/值对

      名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:比如;"firstName":"John"

      JSON 值JSON 值可以是:
      • 数字(整数或浮点数)
      • 字符串(在双引号中)
      • 逻辑值(true 或 false)
      • 数组(在方括号中)
      • 对象(在花括号中)
      • null

        比如值是基本类型

        {"city":"Beijing","street":"ChaoyangRoad","postcode":100025}

        {}代表是一个对象,这些都是简单的key/html' target='_blank'>value形式,如果用对象来表示的话:

        public class Info {	public String city;	public String street;	public int postcode;}

        在这个javabean中并没有使用get,set方法,因为get,set方法是使用反射做的,比较慢,这是json最简单的方式,key/value形式,我们知道json有三种种方式,一种是key/value,key/Object,key/array,现在讲讲key/Object形式

        比如:

        {"name":"Michael","address":{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}} 

        这里有2个对象,一个是最外面的,一个是address:它也是一个对象,我们说了{}就代表一个对象,因此 首先写里面的对象,然后再写外面的对象,代码如下:

        Info.java

        package com.example.josn;public class Info {	public String city;	public String street;	public int postcode;}

        Person.java

        /** * {"name":"Michael","address":{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}}  * @author carpool * */public class Person {		public String name;		public Info info;}

        json解析代码:

        </pre><pre class="java" name="code">String jsonString = getJsonString();		try {			JSONObject jb = new JSONObject(jsonString);			Person p = new Person();			Info info  = new Info();			info.city = jb.getJSONObject("address").getString("city");			info.street = jb.getJSONObject("address").getString("street");			info.postcode = jb.getJSONObject("address").getInt("postcode");			p.info = info;			p.name = jb.getString("name");		} catch (JSONException e) {			e.printStackTrace();		}


        现在还剩下一个种形式json,就是key/array,比如:

        {    "people": [        {            "firstName": "Brett",            "lastName": "McLaughlin",            "email": "aaaa"        },        {            "firstName": "Jason",            "lastName": "Hunter",            "email": "bbbb"        },        {            "firstName": "Elliotte",            "lastName": "Harold",            "email": "cccc"        }    ]}

        我们知道{}代表的是一个对象,[]代表的是数组,表示数组中存放了很多对象,对象之间用逗号(,)分开,

        这个用对象封装一般有二种形式,一是直接用集合把解析的对象存储起来,二是用一个类封装一个集合,集合的对象就是上面所解析的对象即可

        第一种方式:

        People.java

        public class People {	public String firstName;	public String lastName;	public String email;}


        解析:

        String jsonString = getJsonString();//json串		try {			JSONObject jb = new JSONObject(jsonString);			JSONArray ja = jb.getJSONArray("people");			ArrayList<People> ps = new ArrayList<People>();			for(int i=0;i<ja.length();i++){				People p = new People();				p.email = ja.getJSONObject(i).getString("email");				p.firstName = ja.getJSONObject(i).getString("firstName");				p.lastName = ja.getJSONObject(i).getString("lastName");				ps.add(p);			}		} catch (JSONException e) {			e.printStackTrace();		}


        第二种写法:

        public class Multiplepeople {	public List<People> peoples;}

        String jsonString = getJsonString();//json串		try {			JSONObject jb = new JSONObject(jsonString);			JSONArray ja = jb.getJSONArray("people");			Multiplepeople multiplepeople = new Multiplepeople();			List<People> ps = new ArrayList<People>();  			for(int i=0;i<ja.length();i++){				People p = new People();				p.email = ja.getJSONObject(i).getString("email");				p.firstName = ja.getJSONObject(i).getString("firstName");				p.lastName = ja.getJSONObject(i).getString("lastName");				ps.add(p);			}  			multiplepeople.peoples =ps;		} catch (JSONException e) {			e.printStackTrace();		}
        json就到了,多练习就会了!

        代表的是key为address,值是个对象,

        ??

        PHP编程

        郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表