2016-06-07 156 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"})