欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-09 17:13:17
目录gson将字符串转jsonobject和jsonarray以下均利用gson来处理jsonobject与json互转引入 jar , 此处引入 com.alibaba.fastjson 版本的ja...

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]

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