Json与Gson

JSON(JavaScript Object Notation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读,同时也方便了机器进行解析和生成。JSON简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构,其可以将JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从Web客户机传递给服务器端程序。JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。

Json有两种数据结构:数组和对象

对象:是指用{}中间的内容,其形式为{key:value,key1:value1,key2:value2}

k#ey为对象的属性,而value为对象的属性值,通过对应的key值来取出对应的value值

数组:是指用[]中间的内容,其形式为["java","javascript",servlet],跟java,c,c++等语言一样的数组
可以通过下标,索引来取出对应的值

下面介绍Json与Gson的使用方法
首先我们先导入我们所需的包: (http://pan.baidu.com/s/1eSJ4mBK) 密码:6j47

搜狗截图17年07月27日0929_1.png

**Json的值也就是上面所说的value值,它有几种类型,数字(包括整形和浮点型),字符串,逻辑值,数组,对象,null,它们可以直接使用,对应相应的key **

直接使用JSONObject对象

    /**
     * 直接使用JSONObject对象
     */
    private static void JSONObject()
    {
        Object nullObj=null;
        //创建一个JSONObject对象
        JSONObject jsonObject=new JSONObject();  //很类似于Map<String,Object>,后面讲到
        jsonObject.put("name","小明");
       //使用浮点型
        jsonObject.put("age",25.2);
      //json没有Data类型
        jsonObject.put("birthday","1990-10-01");
        jsonObject.put("school","蓝翔");
     //数组类型
        jsonObject.put("major",new String[]{"挖掘机"});
        jsonObject.put("house", nullObj);
        System.out.println(jsonObject);
    }

其结果为


搜狗截图17年07月27日0944_2.png

通过Map来使用json

    /**
     * 通过Map来使用json
     */
    private static void createJsonByMap()
    {
        //创建一个Map对象
        Map<String,Object> jsonObjectMap=new HashMap<String,Object>();
        jsonObjectMap.put("name","王小二");
        jsonObjectMap.put("age",25.2);
        jsonObjectMap.put("birthday","1990-10-01");
        jsonObjectMap.put("school","蓝翔");
        jsonObjectMap.put("major",new String[]{"理发","挖掘机"});
        jsonObjectMap.put("house", null);
        System.out.println(new JSONObject(jsonObjectMap));
    }
搜狗截图17年07月27日0946_3.png

下面推荐使用这种方法来使用json

/**
     * 这个是通过bean的形式来使用json
     */
    private static void createJsonByBean()
    {
        
        JSONObject jsonObject =new JSONObject();
        //定义一个bean
        Person person=new Person();
        //调用set方法
        person.setId("1");
        person.setName("王小二");
        person.setAge("18");
        person.setSex("男");
        //通过这个方法来使bean成为JSONObject对象
        JSONObject j1=jsonObject.fromObject(person);
        //判断是否为空
        if(!j1.isEmpty())
        {
            System.out.println(j1);
        }

    }

JSON也可以通过文件来读取里面的jSON数据

public static void main(String[] args) throws IOException
    {
    public static void main(String[] args) throws IOException 
      {
        //从文件中读取json数据
        File file=new File(ReadGson.class.getResource("/Json/wangxiaoer.json").getFile());
        String content=FileUtils.readFileToString(file);
        //解析成一个json对象
        JSONObject jsonObject=new JSONObject(content);
        //找到一个名为name的key
        System.out.println(jsonObject.getString("name"));
      }
    }

JSON到这里就结束了

接下来是介绍Gson的使用:(Gson可以将下面四种数据类型转换成json字符串)

类型一:JavaBean

类型二:List<JavaBean>

类型三:List<String>

类型四:List<Map<String,Object>>

private static void createGSON()
    {
        /**
         * List<javabean>对象转换json字符串
         * 将json字符串解析成List<javabean>对象
         */
        //创建一个bean对象
        Person person=new Person();
        person.setId("1");  
        person.setName("王小二");
        person.setAge("18");
        person.setSex("男");
        person.setMajor(new String[]{"理发","挖掘机"});
        //创建一个Gson
        Gson gson=new Gson();
        //将一个javabean转换成json字符串
        String jsonString=gson.toJson(person);
        System.out.println("Json字符串:"+jsonString);
        //将json字符串转换成javabean
        person=gson.fromJson(jsonString, Person.class);
        System.out.println("bean:"+person.toString());
        System.out.println();
        
        /**
         * List<String>对象转换json字符串
         * 将json字符串解析成List<String>对象
         */
        List<String> list=new ArrayList<String>();
        list.add("gson1");
        list.add("json2");
        list.add("json3");
        //将List<String>对象转换成json字符串
        jsonString=gson.toJson(list);
        System.out.println("Json字符串:"+jsonString);
        //将json字符串转换成List<String>
        List<String> list2=gson.fromJson(jsonString,list.getClass());
        System.out.println("List<String>:"+list);
        System.out.println();

        /**
         * 将List<Map<String,Object>>对象转换成json
         * 将json字符串解析成List<Map<String,Object>对象
         */
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        //将Map<String,Object>对象转换成json字符串
        jsonString=gson.toJson(map);
        System.out.println("Json字符串:"+jsonString);
        //将json字符串转换成Map<String,Object>
        Map<String,Object> map2=gson.fromJson(jsonString,map.getClass());
        System.out.println("List<Map<String,Object>:"+map2);
    }
搜狗截图17年07月27日1007_4.png

Gson也能读取JSON文件下的json字符串

public static void main(String[] args) throws IOException
    {
        //从文件中读取json数据
        File file=new File(ReadGson.class.getResource("/Json/wangxiaoer.json").getFile());
        String content=FileUtils.readFileToString(file);
        Gson gson=new Gson();
        //JSON只能解析成它自己的Oject对象
        //GSON能解析成自己的Oject对象
        //正向生成的对象与反向解析的对象是一样的话,可以确保两个对象是一致的
        Person person=gson.fromJson(content,Person.class);
        System.out.println(person.toString());
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,211评论 0 4
  • 在跟我一起学习的过程中要具备以下条件: 1.人:你需要一两个队友跟你一起,帮你解答疑惑(实在找不到有度娘)。2.机...
    sky_yang阅读 205评论 0 0
  • 好久不见啊,男朋友什么时候让我们见见我还单着呢姑娘,说真的,全世界都恋爱了,你为什么还单着······ 你以为放假...
    艾安心来自假巷阅读 646评论 4 1
  • 内容回顾 001 打开毅力的正确方式,借一个个小目标找到接受更高挑战的信心。 002 结合自身情况,选择合适的自律...
    翔子52双鱼阅读 342评论 4 5