java 解析php序列化資料問題
有很多情況會涉及到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, 完美塑造, 戰鬥有氧, 槓鈴雕塑, 核心特訓, 漫步舞林, 身體平衡, 高效衝擊, 魅力熱舞]
相關文章
- iOS介面資料解析問題iOS
- 深度解析JAVA序列化Java
- 資料解析器以及序列化和反序列化
- 解析機器學習中的資料漂移問題機器學習
- 五個常見 PHP 資料庫問題PHP資料庫
- Oracle資料庫字符集問題解析Oracle資料庫
- 記一次序列化的JSON解析問題JSON
- golang 解析php輸出json相容問題GolangPHPJSON
- 解析PHP處理換行符的問題PHP
- 關於時間 PHP 處理包遇到的問題時間序列化差值問題PHP
- 五個常見 PHP 資料庫問題(轉)PHP資料庫
- JAVA訪問雲資料mysql出現問題JavaMySql
- 解決Gson解析Date資料格式的問題
- Oracle資料庫字符集問題解析(轉)Oracle資料庫
- 03.Java資料結構問題Java資料結構
- java Socket接收資料亂碼問題Java
- Java程式的髒資料問題 (轉)Java
- [PHP]不同作業系統下PHP接收POST資料問題 (轉)PHP作業系統
- 關於Java序列化的問題你真的會嗎?Java
- (轉載)Oracle資料庫字符集問題解析Oracle資料庫
- Kubernetes官方java客戶端之二:序列化和反序列化問題Java客戶端
- 請問java中向網頁匯入資料問題!Java網頁
- 利用js解析php的表單資料JSPHP
- php問題PHP
- java培訓教程分享:Java中怎樣將資料物件序列化和反序列化?Java物件
- [轉載]Oracle資料庫字符集問題解析3Oracle資料庫
- [轉載]Oracle資料庫字符集問題解析2Oracle資料庫
- [轉載]Oracle資料庫字符集問題解析1Oracle資料庫
- DB2資料庫移植常見問題全面解析DB2資料庫
- Java 生成的 RSA 公鑰在 PHP 無法正確解析問題解決記錄JavaPHP
- Java 物件序列化 NIO NIO2 深度解析Java物件
- kafka 測試遇到掉資料的問題 nmred/kafka-PHPKafkaPHP
- 兩道題淺析PHP反序列化逃逸PHP
- Redis在存取序列化和反序列化效能問題Redis
- ArrayList 原始碼分析 — 擴容問題及序列化問題原始碼
- ArrayList 原始碼分析 -- 擴容問題及序列化問題原始碼
- java中文問題和資料庫型別有關Java資料庫型別
- Java面試題解析Java面試題