Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 解析Elixir中的字符串_String_Elixir - Fatal编程技术网

String 解析Elixir中的字符串

String 解析Elixir中的字符串,string,elixir,String,Elixir,我想解析Elixir中的字符串。它显然是二进制的。 我想获取左操作数的值,它是'2',但我不确定如何操作。因为它就像一个字符串,列表,元组混合的东西 iex(13)> str = "[{\"start_usage\":\"0\",\"left_operand\":\"2\"}]" iex(15)> is_binary str true 该字符串是从MySQL检索到的JSON格式。 我想使用devinus/poison模块来解析它,但我不确定如何处理第一个和最后一个双引号(“) 似乎

我想解析Elixir中的字符串。它显然是二进制的。 我想获取
左操作数的值,它是'2',但我不确定如何操作。因为它就像一个字符串,列表,元组混合的东西

iex(13)> str = "[{\"start_usage\":\"0\",\"left_operand\":\"2\"}]"
iex(15)> is_binary str
true
该字符串是从MySQL检索到的JSON格式。 我想使用devinus/poison模块来解析它,但我不确定如何处理第一个和最后一个双引号(

似乎我只需要元组部分,这样我就可以像

iex(5)> s = Poison.Parser.parse!(~s({\"start_usage\":\"0\",\"left_operand\":\"2\"}))
%{"left_operand" => "2", "start_usage" => "0"}
iex(6)> s["left_operand"]
"2"
但我不知道如何得到元组部分

提前谢谢

编辑:

我想我找到了自己的方法

iex> iex(4)> [s] = Poison.Parser.parse!("[{\"start_usage\":\"0\",\"left_operand\":\"2\"}]")
[%{"left_operand" => "2", "start_usage" => "0"}]
iex(5)> s
%{"left_operand" => "2", "start_usage" => "0"}
iex(6)> s["left_operand"]
"2"

我不知道这是为什么,我没有传递
~s
前缀

当您解析带有毒药的JSON字符串时,它无法知道JSON对象中的值是整数还是字符串以外的其他值。要获取数字
2
,您可以执行以下操作:

~s({"start_usage":"0","left_operand":"2"})
|> Poison.Parser.parse!
|> Map.get("left_operand")
|> String.to_integer()

您要查找的元组部分实际上是一个

您的原始版本不起作用的原因是,您的JSON在解码时返回了一个映射,作为

获取列表的第一个元素有多种方法

您可以使用
hd
功能:

iex(2)> s = [%{"left_operand" => "2", "start_usage" => "0"}]
[%{"left_operand" => "2", "start_usage" => "0"}]
iex(3)> hd s
%{"left_operand" => "2", "start_usage" => "0"}
或者,您可以进行模式匹配:

iex(4)> [s | _] = [%{"left_operand" => "2", "start_usage" => "0"}]
[%{"left_operand" => "2", "start_usage" => "0"}]
iex(5)> s
%{"left_operand" => "2", "start_usage" => "0"}
此处用于将列表拆分为其头部和尾部元素(尾部被忽略,这就是使用
\uuu
的原因)

这与列表中元素的类型无关。如果需要列表的前3个元素,可以执行以下操作:

iex(6)> [a, b, c | tail] = ["a string", %{}, 1, 5, ?s, []]
["a string", %{}, 1, 5, 115, []]
iex(7)> a
"a string"
iex(8)> b
%{}
iex(9)> c
1
iex(10)> tail
[5, 115, []]