2013-05-17 70 views
4

我目前有此代碼正在運行。它分裂了變量$ json,其中有},{但它也刪除了這些字符,但實際上我需要json_decode函數的尾部和前導括號。我創建了一個解決方案,但想知道是否有更優雅的解決方案?PHP preg_split並替換

<?php 
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5},{"a":1,"b":2,"c":3,"d":4,"e":5}'; 
$individuals = preg_split('/},{/',$json); 

$loop_count =1; 
foreach($individuals as $object){ 
    if($loop_count == 1){$object .='}';} 
    else{$object ="{".$object;} 
    print_r(json_decode($object)); 
    echo '<br />'; 
$loop_count++; 
} 
?> 

編輯: 的$ JSON變量實際檢索作爲JSON對象。一個合適的例子是

[{「id」:「foo」,「row」:1,「col」:1,「height」:4,「width」:5},{「id」 :「bar」,「row」:2,「col」:3,「height」:4,「width」:5}]

+0

如果你想使用JSON數據,你爲什麼不簡單地使用PHP的JSON函數來獲取它?您可以將字符串編碼爲JSOn對象並訪問變量。 – tim

+0

是的,JSON_decode()適用於將JSON數據轉換爲可用的php對象(或者如果您設置參數,則爲數組)。否則,您可能希望查看「被動」與regexp的匹配。 – CP510

+0

變量$ json被髮送到這個文件。我爲這個問題提供了一個硬編碼的例子。看一下編輯和解釋的問題。 – Somk

回答

4

由於你(大概)已經知道,由於逗號和兩個對象,json無效;它基本上是兩個json字符串,它們之間用逗號隔開。

你試圖通過拆分他們解決這個問題,但有一個更容易解決這個問題的方法:

的解決辦法是簡單地通過在方括號包裹它把串入有效的JSON:

$json = '[' . $json . ']'; 

瞧。該字符串現在是有效的json,並將通過一次調用json_decode()成功解析。

希望有所幫助。

+0

謝謝你的工作,因爲我完全不理解JSON。我仍然有興趣知道是否有一個更優雅的解決方案來解決我提出的 – Somk

+0

問題更好的解決方案,當然,這將是修復原始系統 - 如果它發出無效的json,那麼真正的問題在於結束,在一個理想的世界裏,這是修復的地方,而不是在客戶端。 – Spudley

+0

沒有什麼比這更「優雅」的修復它了。這是如此優雅。在處理破損的數據時,事情往往會很快變得不那麼美觀。 (你很幸運,我以前看過的輸入比以前嚴重得多!) – Spudley

0

您可以隨時重新添加它們。 試試這個:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5},{"a":1,"b":2,"c":3,"d":4,"e":5}'; 
$individuals = preg_split('/},{/',$json); 

foreach($individuals as $key=>$val) 
    $individuals[$key] = '{'.$val.'}'; 
+0

這會破壞列表中的第一個和最後一個項目。 – Arjan