史上最全的JSON入门教程读懂这篇带你玩转JSON

JSON是大家再熟悉不过的一门数据格式了,它具有很多优点,比如占用带宽比较小(格式是压缩的)、js可以通过eval()读取、支持多种语言(C、C++、JAVA、PHP等等),我们日常开发中用的比较多的是对json进行封装和解析,这块内容也是我们必须去掌握的,所以我花了一点时间对json的各种封装个解析做了一个详细的教程,方便初学者快速上手入门

什么是JSON?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。它是基于 JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。 JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。JSON就是一串字符串 只不过元素会使用特定的符号标注。

JSON语法规则

JSON 语法是 JavaScript 对象表示语法的子集
{} 双括号表示对象
[] 中括号表示数组
"" 双引号内是属性或值
: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)
数据在键值对中
数据由逗号分隔

比如:{“name”,“zhangb”}表示为一个包含name为zhangb的对象,[{“name”,“zhangb”},{“name”,“lidan”}]表示包含两个对象的数组
这个数组也可以简化为{“name”:[“zhangb”,“lidan”]}
注意:json官网最新的规定如果是字符串,不管是key还是value都得带双引号,比如:{name,‘json’}校验不通过的。
JSON 名称/值对
JSON 数据的书写格式是:名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
“name” : “zhangb”
这很容易理解,等价于这条 JavaScript 语句:
name = “zhangb”

JSON的拼接和封装

jsonlib的示例

代码示例如下

package com.zhangb;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * @author zhangb
 * @time 0514
 * @desccription 拼接、封装json字符串
 */
public class JsonDemo {

    public static void main(String[] args) {
        setJson();
        joinJsonlib();
    }

    /**
     * 采用字符串拼接json
     * 此处注意转义符
     */
    private  static void setJson(){
        String str = "{\"status\":0,\"desc\":\"成功\",\"data\":[{\"name\":\"zhangb\",\"sex\":\"男\",\"description\":\"JSON教程\"},{\"name\":\"lidan\",\"sex\":\"女\",\"description\":\"测试\"}]}";
        System.out.println("输出字符串拼接的json");
        System.out.println(str);
    }

    /**
     * appache的json,需导入以下包才可以使用
     * json-lib-2.4-jdk15.jar
     * commons-lang.jar
     * commons-beanutils.jar
     * commons-collections.jar
     * commons-logging.jar
     * ezmorph.jar
     */
    private static void joinJsonlib(){
        JSONObject json = new JSONObject();
        //可用put或者element添加对象,大部分时候无区别,value为空时候需要注意
        json.put("status",0);
        json.element("desc","成功");
        JSONObject obj = new JSONObject();
        JSONArray jsonArray = new JSONArray();
        obj.put("name","zhangb");
        obj.put("sex","男");
        obj.put("desc","JSON教程");
        //向obj中添加 对象
        jsonArray.add(obj);
        //此时obj中已经有了对象,如需要继续添加单独对象,需重新new或者清空obj
        obj.clear();
        obj.put("name","lidan");
        obj.put("sex","女");
        obj.put("desc","测试");
        jsonArray.add(obj);
        //添加到最开始的json
        json.put("data",jsonArray);
        System.out.println("输出json封装方法");
        System.out.println(json.toString());
    }
}

输出结果
在这里插入图片描述

阿里巴巴json封装

代码示例如下
这一块和json-lib基本上没什么差别,但是咱FastJson只需要一个包,很方便

package com.zhangb;


import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/**
 * @author zhangb
 * @time 0514
 * @desccription 拼接、封装json字符串
 */
public class JsonDeme01 {

    public static void main(String[] args) {
        joinAliJson();
    }

    private static void joinAliJson(){
       JSONObject json = new JSONObject();
        json.put("status",0);
        json.put("desc","成功");
        JSONArray jsonArray = new JSONArray();
        JSONObject obj = new JSONObject();
        obj.put("name","zhangb");
        obj.put("sex","男");
        obj.put("desc","JSON教程");
        //向obj中添加 对象
        jsonArray.add(obj);
        //此时obj中已经有了对象,如需要继续添加单独对象,需重新new或者清空obj
        obj.clear();
        obj.put("name","lidan");
        obj.put("sex","女");
        obj.put("desc","测试");
        jsonArray.add(obj);
        json.put("data",jsonArray);
        System.out.println("阿里巴巴json封装");
        System.out.println(json.toJSONString());
    }
}

运行结果
在这里插入图片描述

Map和JSON之间的转换

代码示例

package com.zhangb;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author zhangb
 * @time 0514
 * @desccription map与json之间的转换
 */
public class JsonDemo02 {

    public static void main(String[] args) {
        mapToJson();
    }

    private static void mapToJson(){
        //新建一个map
        Map<String,Object> map = new HashMap<>();
        map.put("status",0);
        map.put("desc","成功");
        //新建list<map>
        List<Map<String,Object>> mapList = new ArrayList<>();
        Map<String,Object> obj = new HashMap<>();
        obj.put("name","zhangb");
        obj.put("sex","男");
        obj.put("desc","JSON教程");
        mapList.add(obj);
        Map<String,Object> mobj = new HashMap<>();
        mobj.put("name","lidan");
        mobj.put("sex","女");
        mobj.put("desc","测试");
        mapList.add(mobj);
        //将maplist加入map中
        map.put("data",mapList);

        //将map转换成json
        JSONObject jsonObject = JSONObject.fromObject(map);
        //alibaba将map转化为json ,各种方法
        String  str = JSON.toJSONString(map);
        com.alibaba.fastjson.JSONObject str1 = new com.alibaba.fastjson.JSONObject(map);
        String str2 = new com.alibaba.fastjson.JSONObject().toJSONString(map);

        System.out.println("json-lib的map to json");
        System.out.println(jsonObject);

        System.out.println("Fastjson的map to json");
        System.out.println(str);
        System.out.println(str1);
        System.out.println(str2);
    }

}

输出结果
在这里插入图片描述

实体转换成json

代码示例

package com.zhangb;

import com.alibaba.fastjson.JSON;
import com.zhangb.Entity.BaseEntity;
import com.zhangb.Entity.Person;
import net.sf.json.JSONObject;

import javax.swing.text.html.parser.Entity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author zhangb
 * @time 0514
 * @desccription 实体与json之间的转换
 */
public class JsonDemo03 {

    public static void main(String[] args) {
        entityToJson();
    }

    private  static void entityToJson(){
        BaseEntity baseEntity = new BaseEntity();
        baseEntity.setStatus("0");
        baseEntity.setDesc("成功");

    List<Person> list = new ArrayList<>();
        Person p = new Person();
        p.setName("zhangb");
        p.setSex("男");
        p.setDescription("JSON培训");
        list.add(p);
        Person p1 = new Person();
        p1.setName("lidan");
        p1.setSex("女");
        p1.setDescription("测试");
        list.add(p1);
        //实体封装完成
        baseEntity.setData(list);

//        Json lib的转换方法
        JSONObject jsonObject = JSONObject.fromObject(baseEntity);

//        FastJson的转换方法
        String jsonObject1 = new com.alibaba.fastjson.JSONObject().toJSONString(baseEntity);
        //也可以反着来JSON串转实体对象
        BaseEntity baseEntity1 = JSON.parseObject(jsonObject1,BaseEntity.class);

        System.out.println("json-lib的实体 to json");
        System.out.println(jsonObject);

        System.out.println("Fastjson的实体 to json");
        System.out.println(jsonObject1);
    }

}

输出结果
在这里插入图片描述

Json的解析

代码示例,两者我写到了一起,基本上就是细微差别

package com.zhangb;

import com.alibaba.fastjson.JSON;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * @author zhangb
 * @time 0514
 * @desccription json的解析
 */
public class JsonDemo04 {

    public static void main(String[] args) {
        getJson();
    }

    /**
     * 采用字符串拼接json
     * 此处注意转义符
     */
    private  static String setJson(){
        String str = "{\"status\":0,\"desc\":\"成功\",\"data\":[{\"name\":\"zhangb\",\"sex\":\"男\",\"description\":\"JSON教程\"},{\"name\":\"lidan\",\"sex\":\"女\",\"description\":\"测试\"}]}";
        System.out.println("输出字符串拼接的json");
        System.out.println(str);
        return str;
    }

    private static void getJson(){

     String str = setJson();
     //json lib格式化
     JSONObject jsonObject = JSONObject.fromObject(str);

        String status = jsonObject.getString("status");
        String desc = jsonObject.getString("desc");
        JSONArray jsonArray = jsonObject.getJSONArray("data");
        System.out.println("状态:"+status);
        System.out.println("描述:"+desc);
        for (int i=0;i<  jsonArray.size();i++){
            JSONObject json = jsonArray.getJSONObject(i);
            String name = json.getString("name");
            String sex = json.getString("sex");
            String description = json.getString("description");
            System.out.println("name:"+name+"sex"+sex+"description:"+description);
        }
        System.out.println("阿里巴巴解析json!");
        //阿里巴巴json格式化
        com.alibaba.fastjson.JSONObject jsonObject1 = JSON.parseObject(str);
        String status1 = jsonObject.getString("status");
        String desc1 = jsonObject.getString("desc");
        com.alibaba.fastjson.JSONArray jsonArray1 = jsonObject1.getJSONArray("data");
        for (int i= 0; i< jsonArray1.size();i++){
            com.alibaba.fastjson.JSONObject jsonObject2 = jsonArray1.getJSONObject(i);
            String name = jsonObject2.getString("name");
            String sex = jsonObject2.getString("sex");
            String description = jsonObject2.getString("description");
            System.out.println("name:"+name+"sex"+sex+"description:"+description);
        }
        System.out.println("状态:"+status1);
        System.out.println("描述:"+desc1);
    }


}

运行结果
在这里插入图片描述
相关代码已经提交到我的git,感兴趣的同学可以自行下载
GIT地址:https://github.com/moshushow/JsonDemo

  • 10
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值