java反序列化php序列化的对象

最近工作中遇到一个需要解析php序列化后存入DB的array,

1
2
a: 4 :{i: 0 ;a: 2 :{s: 11 : "province" ;s: 8 : "0016" ;s: 7 : "img" ;s: 49 : "20150117105023_kk-1.jpg" ;}
i: 1 ;a: 2 :{s: 11 : "province" ;s: 8 : "0017" ;s: 7 : "img" ;s: 49 : "20150117105025_kk-1.jpg" ;}}

而我们项目是使用java,就需要反序列化,还好有一个第三方类库可以使用,项目地址:http://www.phprpc.org/zh_CN/docs/

<dependency>
    <groupId>org.sction</groupId>
    <artifactId>phprpc</artifactId>
    <version>3.0.2</version>
</dependency>

使用时,需要知道被序列化的对象是单个对象还是被以array的形式序列化的

若是单个对象,直接可以反序列化

复制代码
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;
}
复制代码

若是array需要借助Cast类,转换成java对应的对象

复制代码
public static List<Test> getUnserializeList(String content) throws Exception {
    List<Test> list = new ArrayList<Test>();
    PHPSerializer p = new PHPSerializer();
    if (StringUtils.isEmpty(content))
        return list;
    AssocArray array = (AssocArray) p.unserialize(content.getBytes());
    for (int i = 0; i < array.size(); i++) {
        Test t = (Test) Cast.cast(array.get(i), Test.class);
        list.add(t);
    }
    return list;
}
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值