有很多情况会涉及到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, 完美塑造, 战斗有氧, 杠铃雕塑, 核心特训, 漫步舞林, 身体平衡, 高效冲击, 魅力热舞]