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(); ArrayListlcs = new ArrayList (); 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包
com.alibaba fastjson 1.1.31
建立测试类对象
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"); Listlist = new ArrayList (); list.add(stu1); list.add(stu2); String listJson = JSONObject.toJSONString(list); System.out.println(listJson);
输出:
[{"age":"21","name":"张三"},{"age":"22","name":"李四"}]
4、JSON 转 对象数组
ListstudentList = 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次才能转换对象数组 Liststrjsonb = JSON.parseArray(getJsonbb, Student.class); System.out.println("只拿jsonbb信息"); System.out.println(strjsonb);
输出:
只拿jsonbb信息
[Student@3d04a311, Student@7a46a697]
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。