2016-06-07 107 views
0

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

我得到的结果是:

"{status: 'ok'}" 

我需要做的图案匹配,并从上面的字符串中提取状态值。

有什么想法?

+1

服务器说它打印该值的格式是什么? (这不是有效的JSON。) – Dogbert

+0

响应内容类型是'text/html',我正在手动构建json – simo

回答

0

由于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"} 

的正则表达式在双引号冒号前包裹字/位combintation。然后将其余的单引号替换为双引号。这可以由Poison解析。

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

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

iex(9)> resultString 
"ok" 
0

首先,你可能会想,构建有效的JSON像这样:

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

通知乐于助人的~s印记,让你不用担心转义双引号,这是在JSON的必需品。

然后,你可以简单地利用Poison解析到地图(或结构,如果你想)和模式匹配,像这样:

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