Json数据解析

本文介绍了JSON的含义,它是轻量级文本数据交换格式,独立于语言且易理解。阐述了其作用,用于前后端数据传输,并对比了与xml的区别。讲解了基础结构,有对象和数组类型。还介绍了解析方式,如手动、gson、FastJson解析。最后分享了Android开发中使用JSON的小知识。

1.json的含义

  1. JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
  2. JSON 是轻量级的文本数据交换格式
  3. JSON 独立于语言 *
  4. JSON 具有自我描述性,更易理解

2. json的作用

   1.json的作用于前后端进行数据传输
   2.与json有这同样作用的还有xml
   3.介绍了json和xml的区别 https://www.cnblogs.com/SanMaoSpace/p/3139186.html

3. json的基础结构

  1. json的基本结构 有两种,分别为 对象类型 和 数组类型

  2. 数组(Array)用方括号(“[]”)表示。      ["值1",值2..,{key:value}]

  3. 对象(Object)用大括号(”{}”)表示。   {key:value1,key=value2}

  4. 名称/值对(name/value)组合成数组和对象。      key:是String类型,但是不能为null
          value:JSONObject   JSONArray  String  Boolean  Double  NULL.. LONG

  5. 名称(name)置于双引号中,值(value)有字符串、数值、布尔值、null、对象和数组。

  6. 并列的数据之间用逗号(“,”)分隔

 4.json的解析方式

  1. 手动解析
      private void json05() throws JSONException {
            String json="{'person':['lisi',23],'book':{'price':[12,{'music':'aa'}]}}";
            JSONObject object = new JSONObject(json);
            //['lisi',23]
            JSONArray person = object.getJSONArray("person");
            for (int i = 0; i <person.length() ; i++) {
                /si---23
                Object o = person.get(i);
            }
            //{'price':[12,{'music'}]}
            JSONObject book = object.getJSONObject("book");
            //[12,{'music':'aa'}]
            JSONArray price = book.getJSONArray("price");
            //{'music':'aa'}
    //        JSONArray jsonArray = price.getJSONArray(1);
            JSONObject jsonObject = price.getJSONObject(1);
            //'aa'
            String music = jsonObject.getString("music");
    
    
        }
    
        private void json04() throws JSONException {
            String json="['name',{'book':'java think'},['age',{'price':20}]]";
            JSONArray jsonArray = new JSONArray(json);
            //name
            String namer=jsonArray.getString(0);
            //{'book':'java think'}---'java think
            JSONObject jsonObject = jsonArray.getJSONObject(1);
            String book = jsonObject.getString("book");
            //['age',{'price':20}]--->20
            JSONArray jsonArray1 = jsonArray.getJSONArray(2);
            //{'price':20}
            JSONObject jsonObject1 = jsonArray1.getJSONObject(1);
            int price = jsonObject1.getInt("price");
    
    
        }
    
        private void json03() throws JSONException {
            String json="['name',['book','music']]";
            JSONArray jsonArray = new JSONArray(json);
            JSONArray jsonArray1 = jsonArray.getJSONArray(1);
            //['book','music']
            String string = jsonArray1.getString(1);
    
        }
    
        /**
         * 数组类型JSONArray
         */
        private void json02() throws JSONException {
            String json="['zs',12,true]";
            JSONArray jsonArray = new JSONArray(json);
            String string = jsonArray.getString(0);
            int anInt = jsonArray.getInt(1);
            boolean aBoolean = jsonArray.getBoolean(2);
            Log.e("tag","--->"+string+"-->"+anInt+"-->"+aBoolean);
    
            //jsonArray.length()获取数组中元素的长度
            for (int i = 0; i <jsonArray.length() ; i++) {
                Object o = jsonArray.get(i);
                Log.e("tag","--->"+o);
    
            }
    
        }
    
        private void json01() {
            String json = "{\n" +
                    "    \"name\": \"zs\"\n" +
                    "}";
    
            //jsonObject
            String json01="{'name':{'age':12}}";//{ "{}":{""}}
            /**
             * {"name":{'age':12},"sex":true}
             */
            try {
                JSONObject object = new JSONObject(json01);
                object.put("sex",true);
                //{"sex":true,"name":{"age":12}}
                Log.e("tag",object+"<--");
    //            String name = object.getString("name");
                JSONObject name = object.getJSONObject("name");
                int age = name.getInt("age");
                Log.e("tag","---->"+age);//12
    
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

     

  2. gson解析
       private void parser6() {
            String json="[{'name':'zs','age':12},{'name':'lisi','age':23}]";
            Gson gson = new Gson();
            List<Person>  list = gson.fromJson(json, new TypeToken<List<Person>>() {
            }.getType());
    //      //  [Person{name='zs', age=12}, Person{name='lisi', age=23}]
            Log.e("tag",list+"--->");
        }
    
        /**
         * 通过json生成对象
         */
        public void parser5(){
            String json="{'name':'zs','age':12}";
            //根据key作为实体类的属性    name   age
            Gson gson = new Gson();
            Type type=new TypeToken<Person>(){}.getType();
            //对象
            Person o = gson.fromJson(json, type);
            //Person{name='zs', age=12}
            Log.e("tag",o+"--->");
    
        }
    
    package com.it.feicui.testapp;
    
    /**
     * Created by Administrator on 2017/10/23.
     */
    
    public class Person {
        private String name;
        private int age;
        //key    ---[]-->[""]
    //    private List<String> data;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
    //    public Person(String name, int age, List<String> data) {
    //        this.name = name;
    //        this.age = age;
    //        this.data = data;
    //    }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
    
                    '}';
        }
    }

     

  3. FastJson解析   https://www.cnblogs.com/wgale025/p/5875430.html  

5.Android开发中可以使用到的小知识

我们作为Android开发人员,一般情况都是后台给我们接口,我们访问这个接口就得到json数据,(大公司都会有接口文档,包含项目中所有的接口)

如果你基础比较扎实,可以和后台开发人员商量着定义json的数据结构

我们请求后台给我们的接口时,可以将接口(也就是个网址)在浏览器中访问,看是否有数据,改接口是否正确,或者下载一个Postman软件进行访问,

如果接口有Post请求和Get请求 之分,Get请求直接访问就能拿到json,Post请求需要在接口后边拼接请求参数,用Postman软件可以不用你自己拼接,

访问网络接口时,

  1. Httpconnection ——最基本的 https://www.jianshu.com/p/e3321c801d21
  2. OKHTTP框架,Volley框架,XUtils框架等等——需要在依赖中引入包 https://www.cnblogs.com/onone/articles/6606448.html
  3. HttpClient——过气的方法(弃用)

我们在生成json对应的实体类时,一种是自己手写,另一种是用插件GsonFormat:根据Json自动生成JavaBean

https://blog.youkuaiyun.com/g984160547/article/details/70257415

有时在第一个页面请求网络,进行某种操作后跳转到第二个页面时将数据展示,会遇到intent传数据,intent传字符串,boolean,int等类型值,也可以传对象,在传对象时需要将实体类(也包含内部类) 实现序列化接口

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值