Json的三种解析技术

前言

上篇博客讲到怎么去读取本地Json文件,此博客主要深入学习Json 的使用,毕竟,不搞明白这东西,项目没法搞了。稳扎稳打,方能步步为赢。

了解Json 的人都知道,Json本质 就是一种具有特定格式的字符串,它的数据结构分为JSON对象和JSON数组。JSON是首先一种数据结构,说白了就是对数据的描述,刚刚出现是为了取代XML,可惜并没有,但是在作为配置文件上,却是很好,由于它小巧灵活,描述数据很好,所以在网络上进行数据传输更加方便。

!!!
请记住JSON对数据的描述形式,既然是形式,那么它的数据形式是什么样的:
对象的描述是: {} 这个表示jsonobject(json对象)
数组的描述是: [] 表示jsonarray(json数组)
属性或值的描述是: “”
连接之间的描述是: :

Json解析三种技术

1.android原生技术

①将Json对象转化为Java对象

一.创建或获取Json数据

      //创建或获取JSON数据
        String json="{\n" +
                "\n" +
                " \"id\":2,\"name\":\"小明\",\n" +
                "\n" +
                "  \"phone\":\"19977443708\"\n" +
                "\n" +
                "\n" +
                "\n" +
                "}";

二.解析Json数据 

        try {
            JSONObject jsonObject = new JSONObject(json);//将Json字符串解析为Json对象
//            int id = jsonObject.getInt("id");
            int id = jsonObject.optInt("id");
            String name = jsonObject.optString("name");
            String phone = jsonObject.optString("phone");
      //     personInfo = new PersonInfo(id, name, phone);

        } catch (JSONException e) {
            e.printStackTrace();
        }

②将Json数组转化为Java集合

一.创建或获取Json数据

   String json="[{\n" +
               "\n" +
               " \"id\":1,\"name\":\"小明\",\n" +
               "\n" +
               "  \"phone\":\"19977443708\"\n" +
               "\n" +
               "\n" +
               "\n" +
               "},{\n" +
               "\n" +
               " \"id\":2,\"name\":\"小芳\",\n" +
               "\n" +
               "  \"phone\":\"19977449708\"\n" +
               "\n" +
               "\n" +
               "\n" +
               "}]";

二.解析Json数据  

     try {
            JSONArray jsonArray=new JSONArray(json);
            for(int i=0;i<jsonArray.length();i++)
            {
                JSONObject jsonObject=jsonArray.getJSONObject(i);
                if(jsonObject!=null) {
                    int id = jsonObject.optInt("id");
                    String name = jsonObject.optString("name");
                    String phone = jsonObject.optString("phone");
                    //封装JAVA对象
                    PersonInfo personInfo=new PersonInfo(id, name, phone);
                    personInfoList.add(personInfo);
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

③复杂Json数据解析

       //获取或创建Json数据
        String json="{\"fileNameList\":[\"丛.mp4\",\"乐.mp4\",\"乡.mp4\",\"书.mp4\",\"云.mp4\",\"井.mp4\",\"京.mp4\",\"人.mp4\",\"休.mp4\",\"伞.mp4\",\"光.mp4\",\"农.mp4\",\"动.mp4\",\"化.mp4\",\"去.mp4\",\"友.mp4\",\"叶.mp4\",\"喜.mp4\",\"园.mp4\",\"坐.mp4\",\"墙.mp4\",\"夏.mp4\",\"奔.mp4\",\"女.mp4\",\"妈.mp4\",\"学.mp4\",\"守.mp4\",\"家.mp4\",\"尾.mp4\",\"岁.mp4\",\"工.mp4\",\"巴.mp4\",\"巾.mp4\",\"帆.mp4\",\"广.mp4\",\"床.mp4\",\"弓.mp4\",\"归.mp4\",\"彩.mp4\",\"心.mp4\",\"忙.mp4\",\"思.mp4\",\"情.mp4\",\"扇.mp4\",\"打.mp4\",\"扬.mp4\",\"教.mp4\",\"明.mp4\",\"朋.mp4\",\"望.mp4\",\"杉.mp4\",\"来.mp4\",\"果.mp4\",\"树.mp4\",\"桑.mp4\",\"梦.mp4\",\"棉.mp4\",\"植.mp4\",\"止.mp4\",\"比.mp4\",\"毛.mp4\",\"水.mp4\",\"河.mp4\",\"清.mp4\",\"熊.mp4\",\"爸.mp4\",\"牙.mp4\",\"玩.mp4\",\"瓜.mp4\",\"电.mp4\",\"男.mp4\",\"看.mp4\",\"秤.mp4\",\"稻.mp4\",\"窗.mp4\",\"窝.mp4\",\"笑.mp4\",\"篮.mp4\",\"米.mp4\",\"粽.mp4\",\"羽.mp4\",\"翔.mp4\",\"肚.mp4\",\"舌.mp4\",\"舟.mp4\",\"苗.mp4\",\"草.mp4\",\"菜.mp4\",\"虫.mp4\",\"谷.mp4\",\"走.mp4\",\"足.mp4\",\"遇.mp4\",\"采.mp4\",\"量.mp4\",\"门.mp4\",\"队.mp4\",\"雨.mp4\",\"雷.mp4\",\"面.mp4\",\"飞.mp4\",\"饭.mp4\",\"马.mp4\",\"鼓.mp4\",\"龟.mp4\"],\"videoAlbumName\":\"douyin_video\"}";
//        List<Character> characterList=new ArrayList<>();
    try {
            JSONObject jsonObject3 = new JSONObject(json);
            String videoAlbumName=jsonObject3.optString("videoAlbumName");
            String fileNameList=jsonObject3.getString("fileNameList");
                JSONArray jsonArray=new JSONArray(fileNameList);
                for(int i=0;i<jsonArray.length();i++)
                {
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    if(jsonObject!=null)
                     nameList.add(jsonObject);
                }

④特殊格式的Json数据解析

2.Gson技术

首先,得添加依赖。Using Gson with Gradle/Android

dependencies {
    implementation 'com.google.code.gson:gson:2.10'
}

 然后根据不同的类型进行不同的操作

①将json转化为java对象

    private void jsonTojavaObjectByGson(){

        String json="{\n" +
                "\n" +
                " \"id\":2,\"name\":\"小明\",\n" +
                "\n" +
                "  \"phone\":\"19977443708\"\n" +
                "\n" +
                "\n" +
                "\n" +
                "}";
        //解析数据
        Gson gson = new Gson();
        PersonInfo personInfo=gson.fromJson(json,PersonInfo.class);

//显示数据
        textViewNative.setText(json);
        textViewLast.setText(personInfo.toString());
    }

②将json转化为java中 List集合 

  private void jsonTojavaListByGson(){
        String json="[{\n" +
                "\n" +
                " \"id\":1,\"name\":\"小明\",\n" +
                "\n" +
                "  \"phone\":\"19977443708\"\n" +
                "\n" +
                "\n" +
                "\n" +
                "},{\n" +
                "\n" +
                " \"id\":2,\"name\":\"小芳\",\n" +
                "\n" +
                "  \"phone\":\"19977449708\"\n" +
                "\n" +
                "\n" +
                "\n" +
                "}]";

        Gson gson=new Gson();
        List<PersonInfo> personInfos= gson.fromJson(json, new TypeToken<List<PersonInfo>>() {
        }.getType());

        textViewNative.setText(json);
        textViewLast.setText(personInfos.toString());

    }

③ 将java转化为json对象

    private void javaToJsonObjectByGson(){
        //获取或创建java对象
        PersonInfo personInfo=new PersonInfo(1,"小强","19934555944");
        //生成json数据
        Gson gson=new Gson();
        String json=gson.toJson(personInfo);
        //展示代码

        textViewNative.setText(personInfo.toString());
        textViewLast.setText(json);
    }

④将java转化为json数组 

   private void javaToJsonArrayByGson(){
        //创建java对象
        List<PersonInfo> personInfos=new ArrayList<>();
        PersonInfo xiaoFen=new PersonInfo(4,"小兰","17754553490");
        PersonInfo xiaoLi=new PersonInfo(4,"小李","17457553490");
        personInfos.add(xiaoFen);
        personInfos.add(xiaoLi);
        //生成json数据
        Gson gson=new Gson();
        String json=gson.toJson(personInfos.toString());
    }

 阅读:《法治的细节-152》

英语:一篇阅读+写作

高等数学:还停留在一重积分

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天真小巫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值