我使用http客户端通过http请求调用服务器,问题是我如何将响应中的结果体转换为地图?
我得到的结果是:
"{status: 'ok'}"
我需要进行模式匹配,并从上面的字符串中提取状态值。
有什么想法吗?
答案 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"})