【发布时间】:2018-05-13 10:54:27
【问题描述】:
我正在从我的数据库中获取这个字符串作为查询结果:
"%Sample.Struct{list: [], total: \"0.00\", day: 6, id: \"8vfts6\"}"
有什么办法可以将这个转换回地图吗? 我在用毒药解码它时遇到了这个错误
** (Poison.SyntaxError) Unexpected token: %
(poison) lib/poison/parser.ex:56: Poison.Parser.parse!/2
(poison) lib/poison.ex:83: Poison.decode!/2
我无法修复将数据添加到数据库的方式,我必须找到一种合适的方式让键/值路由轻松地从中检索数据。 (这只是一个更复杂结果的示例)
【问题讨论】:
-
这不是 JSON。您可以使用 eval (Code.eval_string) 但这通常是个坏主意。你是如何产生这个东西的?使用
inspect? inspect 返回的字符串不一定包含有效的 Elixir 语法,但在本例中包含。 -
如果你想序列化 Elixir 结构或映射以将其保存在数据库中,更好的方法是使用 pair 或
:erlang.term_to_binary和:erlang.binary_to_term。在您的示例中,您需要eval_string它,正如@Dogbert 所说,出于安全原因(以及更多),这不是一个好主意。 -
因此,如果您无法修复它在数据库中的存储方式,则需要为您的结构编写解析器。
标签: json elixir decode elixir-poison