2015-08-18 27 views
2

我做的紅寶石MySQL查詢,並且它給了我一個這樣的字符串:我可以使用哪種方法來解析困難的字符串?

O:8:"stdClass":4:{s:7:"updates";a:1:{i:0;O:8:"stdClass":10:{s:8:"response";s:6:"latest";s:8:"download";s:65:"https://downloads.wordpress.org/release/fr_FR/wordpress-4.2.4.zip";s:6:"locale";s:5:"fr_FR";s:8:"packages";O:8:"stdClass":5:{s:4:"full";s:65:"https://downloads.wordpress.org/release/fr_FR/wordpress-4.2.4.zip";s:10:"no_content";b:0;s:11:"new_bundled";b:0;s:7:"partial";b:0;s:8:"rollback";b:0;}s:7:"current";s:5:"4.2.4";s:7:"version";s:5:"4.2.4";s:11:"php_version";s:5:"5.2.4";s:13:"mysql_version";s:3:"5.0";s:11:"new_bundled";s:3:"4.1";s:15:"partial_version";s:0:"";}}s:12:"last_checked";i:1439805713;s:15:"version_checked";s:5:"4.2.4";s:12:"translations";a:0:{}} 

我需要解析此部分:S:6:「最新」就知道它是否是最新版本或升級可用。

我可以在ruby中使用哪種方法?我剛開始使用這種語言,這是我第一次使用面向對象的語言,我只是習慣性地使用C語言。

+4

它看起來像一個系列化PHP類實例。我懷疑你真的想解析這個。 – mudasobwa

+1

你最好打賭是[反序列化](http://php.net/manual/en/function.unserialize.php),然後可能[json_encode](http://php.net/manual/en/function。 json-encode.php)使用PHP。然後你可以在Ruby中解析JSON。 – naomik

回答

8

這是用PHP序列化的字符串。在Ruby中沒有簡單且穩定的解析方法。正則表達式只會到達目的地,並且會很脆弱,因爲序列化的字符串不是常規的。

但是,有一個gem php-serialize允許從Ruby以PHP方式進行反序列化和序列化。如果你看看這個寶石,你會發現解析器真的很複雜。

隨着創業板,你可以這樣做:

require 'php-serialize' 
string = 'O:8:"stdClass":4:{s:7:"updates";a:1:{i:0;O:8:"stdClass":10:{s:8:"response";s:6:"latest";s:8:"download";s:65:"https://downloads.wordpress.org/release/fr_FR/wordpress-4.2.4.zip";s:6:"locale";s:5:"fr_FR";s:8:"packages";O:8:"stdClass":5:{s:4:"full";s:65:"https://downloads.wordpress.org/release/fr_FR/wordpress-4.2.4.zip";s:10:"no_content";b:0;s:11:"new_bundled";b:0;s:7:"partial";b:0;s:8:"rollback";b:0;}s:7:"current";s:5:"4.2.4";s:7:"version";s:5:"4.2.4";s:11:"php_version";s:5:"5.2.4";s:13:"mysql_version";s:3:"5.0";s:11:"new_bundled";s:3:"4.1";s:15:"partial_version";s:0:"";}}s:12:"last_checked";i:1439805713;s:15:"version_checked";s:5:"4.2.4";s:12:"translations";a:0:{}}' 
wp_settings = PHP.unserialize(string) 
puts wp_settings.updates.inspect