我有这样的字符串
a="{\"company\"=>\"khkhkh\", \"email\"=>\"hjkh@hkkj.kjh\",\"address\"=>\"yiyiyu\", \"date\"=>Mon, 28 Apr 2014 13:14:10 BST +01:00}"
但是在生成这个字符串时我犯了一个错误。也就是说,我附加日期而不转换为字符串。所以现在如果我尝试使用 eval(a)将其恢复为哈希值。这会引发错误,这是可以接受的。
SyntaxError: (eval):1: syntax error, unexpected tCONSTANT, expecting => ....
有没有办法让哈希回来,因为我无法重新生成这个字符串。
任何帮助都会非常值得注意。 感谢。
答案 0 :(得分:2)
对于你的直接困境:
a.gsub(/\"date\"\s*=>(.*?)(\}|,\s*\")/, '"date"=>"\1"\2')
即使日期不是哈希的最后一个条目,这也应该有效。
下一次:真的通过手动将数据转换为您eval
之后的代码来序列化数据不是一个好主意。
在大多数情况下,最好的选择可能只是生成JSON并稍后解析。使用适当的JSON序列化器/生成器还可以确保您的数据在语法上是正确的。
答案 1 :(得分:1)
如果日期总是最后一次,你可以采用直截了当的方法:
date = a.gsub(/[\{\}]/, '').split('=>').last
a.gsub(date, "\"#{date}\"")
将返回
"{\"company\"=>\"khkhkh\", \"email\"=>\"hjkh@hkkj.kjh\",\"address\"=>\"yiyiyu\", \"date\"=>\"Mon, 28 Apr 2014 13:14:10 BST +01:00\"}"
答案 2 :(得分:1)
如果您有多个日期,请尝试使用regexp:
替换引号日期wrong_data = "" # your string
correct_data = wrong_data.gsub(/(\w{3}, \d{2} \w{3} \d{4} \d{2}:\d{2}:\d{2} \w{3} \+\d{2}:\d{2})/, '"\1"')
eval(correct_data)
PS。正如@Gene真正注意到的那样,您应该避免在代码中使用eval
。