当先锋百科网

首页 1 2 3 4 5 6 7

     在项目的需求过程中,涉及到了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赋值给credit
	credit.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;   //定义body
		private Header header;  //定义header
		public 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方法省略***

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

                //定义变量telecom
		Telecom 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和body
		credit.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");    //将值一一的取出来

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

转载于:https://www.cnblogs.com/huohuoL/p/10545483.html