Java--json序列化与反序列化

来源:互联网 发布:windows下使用ipython 编辑:程序博客网 时间:2024/06/03 19:29

     在项目的需求过程中,涉及到了Json字符串的序列化与反序列化的问题,请求报文,响应报文都需要将其转化为相对应的样式。

需要的报文格式:


     在传值的过程中,我们需要一个一个字段的方式赋值,转换可以采纳两种方式

方式一:直接使用Map赋值的方式

直接定义三个map集合,赋值使用,然后通过jsonObject序列化转化,主要代码如下:

Map<String, Map<String, String>> credit = new HashMap<String, Map<String, String>>();Map<String, String> body = new HashMap<String, String>();Map<String, String> header = new HashMap<String, String>();// 给header赋值header.put("date", DateUtils.getNowDateStr());header.put("name", name);// 给body赋值body.put("id", id);body.put("phone", phone);// 将header和body赋值给creditcredit.put("header", header);credit.put("body", body);// jsonObject序列化转换String creditString = JSONObject.toJSONString(credit);

方式二:采用内部类的方式,赋值

什么叫内部类呢?一个类的定义放在另一个类的内部,内部类的定义:

简单的构造成json字符串是不符合要求的,那么该如何生成他想要的形式的,看格式可以发现他们是层层包含的关系,我们可以定义三个类去实现,但是为了避免空间,所以采用的内部类的方法。

我们把三个子类都放在一个类中,然后通过实体定义的方式添加关系,具体代码如下:

public class Telecom {public class Credit implements Serializable{private Body body;   //定义bodyprivate Header header;  //定义headerpublic Body getBody() {return body;}public void setBody(Body body) {this.body = body;}public Header getHeader() {return header;}public void setHeader(Header header) {this.header = header;}}public class Body implements Serializable {/** * 被查询人姓名 */private String personName;***实体部分省略***public String getPersonName() {return personName;}public void setPersonName(String personName) {this.personName = personName;}}public class Header implements Serializable {private String version = "0100";  //版本private String date;   //日期***部分实体以及get,set方法省略***

然后在实现中,我们则可以直接调用赋值使用:

                //定义变量telecomTelecom telecom = new Telecom();Telecom.Credit credit = telecom.new Credit();   //定义credit变量Telecom.Body body = telecom.new Body();    //定义body变量body.setIdNumber(id);   //body赋值                Telecom.Header header = telecom.new Header();    //定义header变量header.setActionCode("0");    //header赋值                credit.setBody(body);  //credit赋值header和bodycredit.setHeader(header);// 转成字符串格式String creditstring = JSONObject.toJSONString(credit);// 拼接报文格式String getRequestTokenMap = "{" + '"' + "credit" + '"' + ":"+ creditstring;System.out.println(getRequestTokenMap);    //最后输出结果

     当信息验证之后传回来的时候,传给我们的依旧是Json样式,这时我们又需要反序列化将json中字符串的值一一的获取出来,这次我采用的是最简单的“拆分法”的方式。

               // 将结果转换成jsonarray对象JSONArray jsonArray = JSONObject.parseArray(sBufferToken);JSONObject jsonone = jsonArray.getJSONObject(0);System.out.println(jsonone);JSONObject credit = jsonone.getJSONObject("credit");JSONObject header = credit.getJSONObject("header");JSONObject body = credit.getJSONObject("body");// 将body中的某个值取出来System.out.println(header);System.out.println(body);String rspCode = header.getString("rspCode");    //将值一一的取出来

自己想要什么结果都可以取出来,然后再进行自己的操作或者判断即可。

1 0
原创粉丝点击