我正在使用http客戶端通過http請求調用服務器,問題是如何將響應中的結果體轉換爲地圖?將字符串轉換爲映射?
我得到的結果是:
"{status: 'ok'}"
我需要做的圖案匹配,並從上面的字符串中提取狀態值。
有什麼想法?
我正在使用http客戶端通過http請求調用服務器,問題是如何將響應中的結果體轉換爲地圖?將字符串轉換爲映射?
我得到的結果是:
"{status: 'ok'}"
我需要做的圖案匹配,並從上面的字符串中提取狀態值。
有什麼想法?
由於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"
首先,你可能會想,構建有效的JSON像這樣:
~s({"status": "ok"})
通知樂於助人的~s
印記,讓你不用擔心轉義雙引號,這是在JSON的必需品。
然後,你可以簡單地利用Poison解析到地圖(或結構,如果你想)和模式匹配,像這樣:
%{"status" => status} = Poison.Parser.parse! ~s({"status": "ok"})
服務器說它打印該值的格式是什麼? (這不是有效的JSON。) – Dogbert
響應內容類型是'text/html',我正在手動構建json – simo