专栏首页呼延Java中 Json的使用Java JSONGson的使用

Java中 Json的使用Java JSONGson的使用

Java JSON

本章节我们将为大家介绍如何在 Java 语言中使用 JSON。

类库选择

Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。

下面是几个常用的 JSON 解析类库。

  • Gson:谷歌开发的 JSON 库,功能十分全面。
  • FastJson:阿里巴巴开发的 JSON 库,性能十分优秀。
  • Jackson:社区十分活跃且更新速度很快。

以下教程基于 FastJson 讲解。

环境配置

在 Maven 构建的项目中,在pom.xml文件中加入以下依赖即可。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
</dependency>

编码与解码

编码

从Java变量到 JSON 格式的编码过程如下:

public void testJson() {
    JSONObject object = new JSONObject();
    //string
    object.put("string","string");
    //int
    object.put("int",2);
    //boolean
    object.put("boolean",true);
    //array
    List<Integer> integers = Arrays.asList(1,2,3);
    object.put("list",integers);
    //null
    object.put("null",null);

    System.out.println(object);
}

在上述代码中,首先建立一个 JSON 对象,然后依次添加字符串,整数,布尔值以及数组,最后将其打印为字符串。 输出结果如下:

{"boolean":true,"string":"string","list":[1,2,3],"int":2}

解码

从 JSON 对象到 Java 变量的解码过程如下:

public void testJson2() {

  JSONObject object = JSONObject
      .parseObject("{\"boolean\":true,\"string\":\"string\",\"list\":[1,2,3],\"int\":2}");
  //string
  String s = object.getString("string");
  System.out.println(s);
  //int
  int i = object.getIntValue("int");
  System.out.println(i);
  //boolean
  boolean b = object.getBooleanValue("boolean");
  System.out.println(b);
  //list
  List<Integer> integers = JSON.parseArray(object.getJSONArray("list").toJSONString(),Integer.class);
  integers.forEach(System.out::println);
  //null
  System.out.println(object.getString("null"));

}

在上例中,首先从 JSON 格式的字符串中构造一个 JSON 对象,之后依次读取字符串,整数,布尔值以及数组,最后分别打印,打印结果如下:

string
2
true
1
2
3
null

JSON 对象与字符串的相互转化

方法

作用

JSON.parseObject()

从字符串解析 JSON 对象

JSON.parseArray()

从字符串解析 JSON 数组

JSON.toJSONString(obj/array)

将 JSON 对象或 JSON 数组转化为字符串

实例:

//从字符串解析JSON对象
JSONObject obj = JSON.parseObject("{\"runoob\":\"菜鸟教程\"}");
//从字符串解析JSON数组
JSONArray arr = JSON.parseArray("[\"菜鸟教程\",\"RUNOOB\"]\n");
//将JSON对象转化为字符串
String objStr = JSON.toJSONString(obj);
//将JSON数组转化为字符串
String arrStr = JSON.toJSONString(arr);

Gson的使用

由于最近需要使用Gson,而Gson和fastjson在使用上还是有所区别的,所以今天稍微试一下Gson的使用.

测试代码如下:

import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.annotations.SerializedName;

import java.util.List;

/**
 * Created by pfliu on 2019/05/16.
 */
public class GsonTest {


    public static void main(String[] args) {
        Gson gson = new Gson();
        JsonParser parser = new JsonParser();


        // 从json字符串拿到java对象并且拿到某些字段
        String input = "{\"name\": \"huyanshi\", \"age\": 2}";
        User user = gson.fromJson(input, User.class);
        System.out.println(user.name);
        System.out.println(user.age);

        //从json字符串拿到json对象并且获取某些字段
        JsonObject jo = parser.parse(input).getAsJsonObject();
        System.out.println(jo.get("name").getAsString());
        System.out.println(jo.get("age").getAsInt());

        // 从json字符串解析json的list
        //language=JSON
        String i1 = "[{\"name\":\"huyanshi\",\"age\":\"12\"},{\"name\":\"huyanshi1\",\"age\":\"122\"}]";
        List<User> users = gson.fromJson(i1, new TypeToken<List<User>>() {
        }.getType());
        System.out.println(users.toString());

        //新建一个json对象并添加某些字段,之后输出字符串
        JsonObject jo1 = new JsonObject();
        jo1.addProperty("name", "huyanshi");
        jo1.addProperty("age", "12");
        System.out.println(jo1.toString());

        // 将java对象或者数组转换为json字符串
        String a1 = gson.toJson(user);
        String a2 = gson.toJson(users);
        System.out.println(a1);
        System.out.println(a2);

        //测试注解@SerializedName,
        User u = new User();
        u.name = "huyan";
        u.age = 2;
        System.out.println(gson.toJson(u));
    }


    private static class User {
        @SerializedName(value = "nn")
        String name;
        int age;

        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
}

完。

ChangeLog

2018-11-02 完成 2019-05-16 添加gson

以上皆为个人所思所得,如有错误欢迎评论区指正。

欢迎转载,烦请署名并保留原文链接。

联系邮箱:huyanshi2580@gmail.com


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java中几个和时间有关的类

    在几个月以前,我还记得以前学java的时候的教诲,当需要写一个小时的秒数的时候,不要写int seconds = 3600;,而是要int seconds = ...

    呼延十
  • Stackoverflow Oom 死锁OOMStackOverFlow死锁

    PS:文章中使用了Arthas工具,用来动态监控JVM的一些资源,非常好用,强烈安利一下.

    呼延十
  • Java中 Collections工具类的学习

    天天都在用Java集合,也偶尔用到了Collections类中的一些方法,但是一直没有对这个工具类进行一个较为系统的学习,今天放假比较无聊,闲来看一看.并且记录...

    呼延十
  • JSON对象

    星辉
  • Go JSON

    如今在网络编程中JSON这种数据格式占据了较大的市场,如果不出意外,几乎新开发的数据交互,都会使用JSON这种轻量级的数据格式来处理数据交互。所以,怎么解析,转...

    icepy
  • Qt之JSON教程-介绍篇

    Qt君
  • 编辑-发布-开发分离: 静态API设计

    周末在计划着Growth的最外一层,即解决方案的时候,想着自己要做一个静态的API——即基于JSON与GitHub的API。 ? 在之前的那篇《编辑-发布-开发...

    Phodal
  • .NET Core 3.0 里新的JSON API

    JSON.NET 大家都用过,老版本的ASP.NET Core也依赖于JSON.NET。

    solenovex
  • Restful 表述性状态传递

    REStful全称为表述性状态转移。任何事物只要有被引用的必要都为资源。资源可以为实体,可以为抽象的概念。

    mySoul
  • MySQL 5.7 JSON 实现简介

    本文主要介绍了MySQL在5.7.7之后引入的原生JSON支持的特性,说明了引入JSON类型的好处,并结合具体的示例介绍了MySQL在JSON类型上对外的接口以...

    腾讯云数据库团队

扫码关注云+社区

领取腾讯云代金券