0

我有一个 URL 编码的字符串:

a = "%5B%22552A8619-6ECA-4A95-A798-C1E2CE75BFFF%22%2C%2264c19b5b2d0257ddb382dbd3660de3fd%22%2C%22share%22%5D"

如果我对这个字符串进行 URL 解码,那么它将如下所示:

"[\"552A8619-6ECA-4A95-A798-C1E2CE75BFFF\",\"64c19b5b2d0257ddb382dbd3660de3fd\",\"share\"]"

从这个字符串我想得到这个数组:

["552A8619-6ECA-4A95-A798-C1E2CE75BFFF","64c19b5b2d0257ddb382dbd3660de3fd","share"]

如何在没有讨厌的字符串替换的情况下做到这一点?

4

4 回答 4

3

该字符串是一个使用 JSON 编码的数组:

需要'cgi'
需要'json'

a = "%5B%22552A8619-6ECA-4A95-A798-C1E2CE75BFFF%22%2C%2264c19b5b2d0257ddb382dbd3660de3fd%22%2C%22share%22%5D"

JSON[CGI::unescape(a)]

[
    [0] "552A8619-6ECA-4A95-A798-C1E2CE75BFFF",
    [1] "64c19b5b2d0257ddb382dbd3660de3fd",
    [2]“分享”
]

JSON[CGI::unescape(a)].last会回来"share",让你自由回家。

CGI::escape用于删除编码,这会将其转回“正常”的 JSON 编码数组。

JSON[](AKA JSON.parse) 将它从 JSON 表示法转换回 Ruby 数组。

于 2013-01-22T22:45:22.490 回答
3
the_given_string.scan(/"(.*?)"/).flatten
于 2013-01-22T22:49:00.817 回答
2

您可以删除字符并拆分或评估它:

"[\"A798-C1E2CE75BFFF\",\"643fd\",\"share\"]".delete('\"[]').split(',')
# => ["A798-C1E2CE75BFFF", "643fd", "share"]

eval "[\"A798-C1E2CE75BFFF\",\"643fd\",\"share\"]"
# => ["A798-C1E2CE75BFFF", "643fd", "share"]
于 2013-01-22T22:39:25.777 回答
1

你可以eval字符串:

require 'cgi'
a = "%5B%22552A8619-6ECA-4A95-A798-C1E2CE75BFFF%22%2C%2264c19b5b2d0257ddb382dbd3660de3fd%22%2C%22share%22%5D"
x = eval( CGI.unescape(a))
p x #["552A8619-6ECA-4A95-A798-C1E2CE75BFFF", "64c19b5b2d0257ddb382dbd3660de3fd", "share"]

但是 eval 是邪恶的。

您可以使用所谓的讨厌的字符串替换

p CGI.unescape(a).gsub(/\A\["|"\]\Z/,'').split(/","/)

或者你可以试试JSON

require 'cgi'
require 'json'
a = "%5B%22552A8619-6ECA-4A95-A798-C1E2CE75BFFF%22%2C%2264c19b5b2d0257ddb382dbd3660de3fd%22%2C%22share%22%5D"
x = JSON.load( CGI.unescape(a))
于 2013-01-22T22:44:22.530 回答