1. 云栖社区>
  2. PHP教程>
  3. 正文

java 解析php序列化数据问题

作者:用户 来源:互联网 时间:2017-12-01 10:56:23

javaphp问题数据序列化解析

java 解析php序列化数据问题 - 摘要: 本文讲的是java 解析php序列化数据问题, 有很多情况会涉及到php和java进行数据交换。一般情况是通过json数据格式去交换。但是对于那种比如:商城采用php进行开发,管理系统使用java语言开发,这其中就会涉及到数据交互,而正好php进行过数据序列化存储到数据库,而java还

有很多情况会涉及到php和java进行数据交换。一般情况是通过json数据格式去交换。但是对于那种比如:商城采用php进行开发,管理系统使用java语言开发,这其中就会涉及到数据交互,而正好php进行过数据序列化存储到数据库,而java还必须去解析,所以就会有这篇文章。开始我也上网查找过相关的工具类去进行解析,比如说我看到的一篇相关文章解决办法(在最后附录上)。下面介绍我我的方法如下:

1.这是我根据分析php序列化后的字符串进行的对序列化字符串的解析:

 public static Map<Object,Object> phpToJava(String str){    	str = "a:8:{s:5:/"phone/";s:6:/"111111/";s:9:/"mob_phone/";s:6:/"111111/";s:9:/"tel_phone/";N;s:7:/"address/";s:90:/"北京市东城区天天大厦B座-Барнаул-Алтайский край-Россия/";s:4:/"area/";s:55:/"Барнаул-Алтайский край-Россия/";s:6:/"street/";s:34:/"北京市东城区天天大厦B座/";s:7:/"zipcode/";s:9:/"王某某/";s:8:/"passport/";s:0:/"/";}";		str=str.substring(5,str.length()-1);    	str = str.replaceAll("[s|i]://d+:", "").replaceAll("N", "/"/"");		String[] split = str.split(";");		HashMap<Object,Object> list =new HashMap<Object, Object>();		for (int i = 0; i < split.length; i=i+2) {			if(i%2==0){				list.put(split[i].replaceAll("/"", ""), split[i+1].replaceAll("/"", ""));			}		}		for(Map.Entry<Object, Object> map : list.entrySet()){			System.out.print(map.getKey()+"=");			System.out.println(map.getValue());		}    	return list;    }

2.通过main方法进行测试输出即可得到结果,返回值是一个map~

  public static void main(String[] args) {    	phpToJava2(null);  }




****************************************************************************************************************************************************************************************

<<以下是从网站上搜到的工具类,可以尝试下>>

1、引入maven依赖

<!--反序列化 php-->
<dependency>
<groupId>org.sction</groupId>
<artifactId>phprpc</artifactId>
<version>3.0.2</version>
</dependency>

2、反序列化对象方法

 

public static Test getUnserialize(String content) throws Exception {    PHPSerializer p = new PHPSerializer();    if (StringUtils.isEmpty(content))        return null;    Test t =  (Test) p.unserialize(content.getBytes(),Test.class);    return t;}

 

3、测试结果

4、反序列化对象数组 这里的对象是字符串对象

 

/**
* 对php序列化的字符串,进行反序列化
*/
public List<String> unserializePHParray(String content){
List<String> list = new ArrayList<String>();
PHPSerializer p = new PHPSerializer();
if (StringUtils.isEmpty(content))
return list;
try {
AssocArray array = (AssocArray) p.unserialize(content.getBytes());
for (int i = 0; i < array.size(); i++) {
String t = (String) Cast.cast(array.get(i), String.class);
list.add(t);
}
}catch (Exception e){
System.out.println("反序列化PHParray: " + content + " 失败!!!" );
}
return list;
}

 

5、测试结果

public static void main(String args[]) {
String content ="a:10:{i:0;s:18:/"舞蹈(私教)/";i:1;s:5:/"Zumba/";i:2;s:12:/"完美塑造/";i:3;s:12:/"战斗有氧/";i:4;s:12:/"杠铃雕塑/";i:5;s:12:/"核心特训/";i:6;s:12:/"漫步舞林/";i:7;s:12:/"身体平衡/";i:8;s:12:/"高效冲击/";i:9;s:12:/"魅力热舞/";}";
CoachTool tool = new CoachTool();
List<String> reusltList = tool.unserializePHParray(content);
System.out.println(reusltList);

}

输出:[舞蹈(私教), Zumba, 完美塑造, 战斗有氧, 杠铃雕塑, 核心特训, 漫步舞林, 身体平衡, 高效冲击, 魅力热舞]


以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java , php , 问题 , 数据 , 序列化 解析 ,以便于您获取更多的相关知识。