Arrays 在ruby中解析要散列的字符串

Arrays 在ruby中解析要散列的字符串,arrays,ruby,string,hash,Arrays,Ruby,String,Hash,我正在尝试将ruby中的字符串解析为哈希,但我不能完全理解它。我已经将它映射到一个嵌套数组,只需要将它映射到散列 示例字符串 期望散列 我的代码 生成数组 我想你原来的主题有错。 字符串末尾有两个},开头只有一个 如果将其删除,则字符串现在为: subject = "{\"CN\"=\"schoen.io\", \"C\"=\"US\", \"ST\"=\"Texas\", \"L\"=\"North Doyle\", \"O\"=\"SSL Corporation\", \"OU\"=\"In

我正在尝试将ruby中的字符串解析为哈希,但我不能完全理解它。我已经将它映射到一个嵌套数组,只需要将它映射到散列

示例字符串

期望散列

我的代码

生成数组


我想你原来的主题有错。 字符串末尾有两个},开头只有一个

如果将其删除,则字符串现在为:

subject = "{\"CN\"=\"schoen.io\", \"C\"=\"US\", \"ST\"=\"Texas\", \"L\"=\"North Doyle\", \"O\"=\"SSL Corporation\", \"OU\"=\"Information Technology Department\", \"2.5.4.17\"=\"16039-4645\", \"2.5.4.9\"=\"8268 Kemmer Village\", \"2.5.4.42\"=\"Tracy\", \"2.5.4.4\"=\"Jacobi\", \"2.5.4.5\"=\"grbh52f84senk4jkgo9n9a66yg62w78y4a0v36ax8tfacdshublxjpq6arcn7qyx\", \"2.5.29.17\"=\"ssl.com\"}"
您只需执行以下操作: JSON.parsesubject.gsub'=',':'

您将获得所需的输出:

{
 "CN"=>"schoen.io",
 "C"=>"US",
 "ST"=>"Texas",
 "L"=>"North Doyle",
 "O"=>"SSL Corporation",
 "OU"=>"Information Technology Department",
 "2.5.4.17"=>"16039-4645",
 "2.5.4.9"=>"8268 Kemmer Village",
 "2.5.4.42"=>"Tracy",
 "2.5.4.4"=>"Jacobi",
 "2.5.4.5"=>"grbh52f84senk4jkgo9n9a66yg62w78y4a0v36ax8tfacdshublxjpq6arcn7qyx",
 "2.5.29.17"=>"ssl.com"
}

我想你原来的主题有错。 字符串末尾有两个},开头只有一个

如果将其删除,则字符串现在为:

subject = "{\"CN\"=\"schoen.io\", \"C\"=\"US\", \"ST\"=\"Texas\", \"L\"=\"North Doyle\", \"O\"=\"SSL Corporation\", \"OU\"=\"Information Technology Department\", \"2.5.4.17\"=\"16039-4645\", \"2.5.4.9\"=\"8268 Kemmer Village\", \"2.5.4.42\"=\"Tracy\", \"2.5.4.4\"=\"Jacobi\", \"2.5.4.5\"=\"grbh52f84senk4jkgo9n9a66yg62w78y4a0v36ax8tfacdshublxjpq6arcn7qyx\", \"2.5.29.17\"=\"ssl.com\"}"
您只需执行以下操作: JSON.parsesubject.gsub'=',':'

您将获得所需的输出:

{
 "CN"=>"schoen.io",
 "C"=>"US",
 "ST"=>"Texas",
 "L"=>"North Doyle",
 "O"=>"SSL Corporation",
 "OU"=>"Information Technology Department",
 "2.5.4.17"=>"16039-4645",
 "2.5.4.9"=>"8268 Kemmer Village",
 "2.5.4.42"=>"Tracy",
 "2.5.4.4"=>"Jacobi",
 "2.5.4.5"=>"grbh52f84senk4jkgo9n9a66yg62w78y4a0v36ax8tfacdshublxjpq6arcn7qyx",
 "2.5.29.17"=>"ssl.com"
}

此处为Danger,=可能是值的一部分,如KEY=some=value确实如此,但由于OP在问题中使用了m.split'=',我认为使用它是安全的。如果要允许=内部字符串上下文,可以使用诸如subject.scan/?:?:\\\\\\\;[^]*.[^=+/.join':'Danger here,=可能是值的一部分,like KEY=some=value确实如此,但由于OP在问题中使用了m.split'=,我认为使用它是安全的。如果您想在字符串上下文中使用=,您可以使用类似subject.scan/?:?:\\\\\\\\[^]*.[^=]+/.join':'需要询问的第一个问题是:为什么必须处理这样的非标准化结构?它可以用JSON生成吗?第一个问题是:为什么要处理这样一个非标准化的结构?它可以用JSON生成吗?
subject = "{\"CN\"=\"schoen.io\", \"C\"=\"US\", \"ST\"=\"Texas\", \"L\"=\"North Doyle\", \"O\"=\"SSL Corporation\", \"OU\"=\"Information Technology Department\", \"2.5.4.17\"=\"16039-4645\", \"2.5.4.9\"=\"8268 Kemmer Village\", \"2.5.4.42\"=\"Tracy\", \"2.5.4.4\"=\"Jacobi\", \"2.5.4.5\"=\"grbh52f84senk4jkgo9n9a66yg62w78y4a0v36ax8tfacdshublxjpq6arcn7qyx\", \"2.5.29.17\"=\"ssl.com\"}"
{
 "CN"=>"schoen.io",
 "C"=>"US",
 "ST"=>"Texas",
 "L"=>"North Doyle",
 "O"=>"SSL Corporation",
 "OU"=>"Information Technology Department",
 "2.5.4.17"=>"16039-4645",
 "2.5.4.9"=>"8268 Kemmer Village",
 "2.5.4.42"=>"Tracy",
 "2.5.4.4"=>"Jacobi",
 "2.5.4.5"=>"grbh52f84senk4jkgo9n9a66yg62w78y4a0v36ax8tfacdshublxjpq6arcn7qyx",
 "2.5.29.17"=>"ssl.com"
}