使用Gson将字符串转换成JsonObject和JsonArray

2022-07-18,,,,

目录
  • gson将字符串转jsonobject和jsonarray
    • 以下均利用gson来处理
  • jsonobject与json互转
    • 引入 jar , 此处引入 com.alibaba.fastjson 版本的jar包
    • 建立测试类对象
    • 转换

gson将字符串转jsonobject和jsonarray

以下均利用gson来处理

1.将bean转换成json字符串:

public static string beantojsonstring(object bean) {
        return new gson().tojson(bean);
    }

2.将json字符串转换成对象:

public static object jsontoobject(string json,class beanclass) {
        gson gson = new gson();
        object res = gson.fromjson(json, beanclass);
        return res;
    }

注:转换后的对象使用前进行强转:例如bean bean1 = (bean)formatutil.jsontoobject(json, bean.class);

3.将json字符串转换成jsonobject对象:

jsonobject returndata = new jsonparser().parse(jsonstr).getasjsonobject();

4.将jsonarray类型的json字符串解析成对象方法  

    gson gson = new gson(); 
    jsonparser parser = new jsonparser(); 
    jsonarray jarray = parser.parse(jstring).getasjsonarray(); 
 
    arraylist<channelsearchenum> lcs = new arraylist<channelsearchenum>(); 
 
    for(jsonelement obj : jarray ){ 
        channelsearchenum cse = gson.fromjson( obj , channelsearchenum.class); 
        lcs.add(cse); 
    }

或者

string json = "[{\"username\":\"test\"},{\"username\":\"test2\"}]"; 
system.out.println(new jsonparser().parse(json).getasjsonarray().get(0).getasjsonobject().get("username").getasstring());

5.获取jsonobject中指定key值对应的jsonarray对象:

string json= "{\"pids\":[\"1\",\"2\",\"3\"]}";
system.out.println(new jsonparser().parse(json).getasjsonobject().getasjsonarray("pids").get(0).getasstring());

jsonobject与json互转

使用目的

目前数据交互大多以 json 字符串为信息传输,主要格式有

{"age":"22","name":"李四"}

[{"age":"21","name":"张三"}]

最常见的应用场景是前后端对接,第三方平台文档对接,下面展示转换使用。

引入 jar , 此处引入 com.alibaba.fastjson 版本的jar包

        <dependency>
            <groupid>com.alibaba</groupid>
            <artifactid>fastjson</artifactid>
            <version>1.1.31</version>
        </dependency>

建立测试类对象

class student {
    private string name;
    private string age;
 
    public string getname() {
        return name;
    }
 
    public void setname(string name) {
        this.name = name;
    }
 
    public string getage() {
        return age;
    }
 
    public void setage(string age) {
        this.age = age;
    } 
}

转换

1、对象 转 json

        student stu1 = new student();
        stu1.setname("张三");
        stu1.setage("21");
        string stu1json = jsonobject.tojsonstring(stu1);

输出:

{"age":"21","name":"张三"}

2、json 转 对象

        student stu1to = json.parseobject(stu1json, student.class);
        system.out.println("json 转对象:");
        system.out.println(stu1to);
        system.out.println(stu1to.getname());
        system.out.println(stu1to.getage());

输出:

json 转对象:
student@2aae9190
张三
21

注:json键名要与对象属性名相对应

3、对象数组 转 json

        student stu2 = new student();
        stu2.setname("李四");
        stu2.setage("22");
        list<student> list = new arraylist<student>();
        list.add(stu1);
        list.add(stu2);
 
        string listjson = jsonobject.tojsonstring(list);
        system.out.println(listjson);

输出:

[{"age":"21","name":"张三"},{"age":"22","name":"李四"}]

4、json 转 对象数组

        list<student> studentlist = json.parsearray(listjson, student.class);
        for (student student : studentlist) {
            system.out.println(student.getname());
        }

输出:

json 数组格式转换对象
张三
李四

5、json多级组合,适用于请求文档传输参数

        jsonobject jsona = new jsonobject();
        jsona.put("number", "1");
        jsonobject jsonb = new jsonobject();
        jsonb.put("listmap", list);
 
        jsonobject jsonall = new jsonobject();
        jsonall.put("jsona", jsona);
        jsonall.put("jsonb", jsonb);
        string jsonallstr =jsonobject.tojsonstring(jsonall);
        system.out.println(jsonallstr);

输出:

{"jsona":{"number":"1"},"jsonb":{"listmap":[{"age":"21","name":"张三"},{"age":"22","name":"李四"}]}}

6、多级 json 组合

6.1、只获取指定字段,接上方示例代码

string getjsona = json.parseobject(jsonallstr).getstring("jsona");
string strjsona = json.parseobject(getjsona, string.class); //指定获取 字段名对象信息,如果为单个string可不指定,这里作为实例写出
system.out.println("只拿jsona信息");
system.out.println(strjsona);

输出:

只拿jsona信息
{"number":"1"}

6.2、获取指定字段对象

    string getjsonb = json.parseobject(jsonallstr).getstring("jsonb");
    string getjsonbb = json.parseobject(getjsonb).getstring("listmap");    //这里被二级包裹,所以要获取2次才能转换对象数组
    list<student> strjsonb = json.parsearray(getjsonbb, student.class);
    system.out.println("只拿jsonbb信息");
    system.out.println(strjsonb);

输出:

只拿jsonbb信息
[student@3d04a311, student@7a46a697]

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

《使用Gson将字符串转换成JsonObject和JsonArray.doc》

下载本文的Word格式文档,以方便收藏与打印。