使用Gson将字符串转换成JsonObject和JsonArray
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]
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
上一篇: 详细全面解析Java泛型