2013-03-23 123 views
2
正則表達式的任何命令

我目前正在與在下面的格式輸出JSON數據的web服務工作:如何搜索字符串的子字符串可以在使用PHP

{"ID":1291,"Name":"Houses of the Holy","Artist":"Led Zeppelin","Year":1973} 

然而,從一個項目到下一個項目的順序不一致。例如:

{"ID":2958,"Label":"Reprise Records","Name":"Electric Ladyland","Year":1968} 

當然不能寫的正則表達式依賴於屬性以均勻順序爲,由於爲了從一個項目到下一個而變化(儘管它們總是與ID開始)。

我會用」「,」作爲分隔符使用使preg_split,但偶爾會一個曲目,像這樣:

{"ID":9237,"Tracklist":[{"Track1":"Taxman","Track2":"Eleanor Rigby"}]} 

...這將搞砸了

哪有。我使用正則表達式來搜索可能以任何順序出現的子串,或者根本不出現?或者我將不得不在Web服務返回的每個項目上運行多個正則表達式,每個可能的屬性都有一個?

+3

這聽起來像你需要一個解析器。你不能使用內置的JSON解析器嗎? – nkr 2013-03-23 13:19:01

+1

[json_decode](http://php.net/manual/en/function.json-decode.php)不適用於您? – 2013-03-23 13:20:59

+0

我不認爲正則表達式可以做你需要的東西。在你的情況下使用語法分析器可能會有所幫助。 – 2013-03-23 13:22:01

回答

5

應該很容易訪問每個項目b ÿ使用json_decode()

$results = json_decode('{"ID":2958,"Label":"Reprise Records","Name":"Electric Ladyland","Year":1968}', true); 
print_r($results); 

輸出: 陣列 ( [ID] => 2958 [標籤] =>再發生紀錄 [名稱] =>電Ladyland [年] => 1968 )

+0

洛爾茲....看起來像我們讀對方的心靈。一個建議使用TRUE與JSON解碼其他明智的返回將是simpleobject,而不是數組 – alwaysLearn 2013-03-23 13:28:07

+0

感謝您的答案。很高興看到它比我想象的要簡單得多! – user2131888 2013-03-23 13:50:16

0

我不知道爲什麼你不想使用json_decode()

$json_string = '{"ID":1291,"Name":"Houses of the Holy","Artist":"Led Zeppelin","Year":1973}'; 
$json_array =json_decode($json_string,true); 

輸出將

Array 
(
[ID] => 1291 
[Name] => Houses of the Holy 
[Artist] => Led Zeppelin 
[Year] => 1973 
) 

然後,您可以操縱的方式排列您想