将字符串转换为地图?

时间:2016-06-07 10:26:43

标签: elixir

我使用http客户端通过http请求调用服务器,问题是我如何将响应中的结果体转换为地图?

我得到的结果是:

"{status: 'ok'}"

我需要进行模式匹配,并从上面的字符串中提取状态值。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

正如Dogbert指出的那样,你得到的回答是无效的JSON。所以你的第一步是将它变成适当的格式:

iex(3)> s = "{status: 'ok'}"
"{status: 'ok'}"

iex(4)> b = Regex.replace(~r/([a-z0-9]+):/, s, "\"\\1\":")
"{\"status\": 'ok'}"

iex(5)> json = b |> String.replace("'", "\"") |> Poison.decode!
%{"status" => "ok"}

regexp用双引号将冒号前的单词/数字组合包装起来。然后用双引号替换剩余的单引号。这可以通过Poison解析。

然后第二步是提取您想要的信息。这可以使用模式匹配来完成:

iex(8)> %{"status" => resultString} = json
%{"status" => "ok"}

iex(9)> resultString
"ok"

答案 1 :(得分:0)

首先,您可能希望构建有效的JSON,如下所示:

~s({"status": "ok"})

注意有用的~s sigil,让您不必担心转义双引号,这是JSON中的必需品。

然后,您可以简单地利用PHP-SDK解析为地图(或结构,如果需要)和模式匹配,如下所示:

%{"status" => status} = Poison.Parser.parse! ~s({"status": "ok"})