【发布时间】:2015-12-06 21:40:41
【问题描述】:
我对 json 格式字符串的模式匹配有疑问。 在这里我添加了一个简短的版本(只是将长 json 字符串更改为 "{\"jsondata\"}" 所以我有这个成功的模式匹配:
> MyData2={ok,{{"HTTP/1.1",200,"OK"},
[{"connection","Keep-Alive"},
{"date","Thu, 10 Sep 2015 12:03:49 GMT"},
{"server","Apache/2.4.7 (Ubuntu)"},
{"vary","X-Auth-Token"},
{"content-length","1171"},
{"content-type","application/json"},
{"x-openstack-request-id",
"req-31b4efc1-2af4-4130-b7a8-01d94b456096"},
{"keep-alive","timeout=5, max=100"}],
"{\"jsondata\"}"}}.
之后我运行以下命令:
> {ok,{{"HTTP/1.1",ReturnCode, State},B,J}}=MyData2.
不幸的是我明白了
如果我将"{\"jsondata\"}" 更改为"jsondata",则最后一个模式匹配工作正常
我不知道如何提取 json 并在 J 中获取 "{\"jsondata\"}"
我会接受任何想法
** 异常错误:右侧值不匹配
【问题讨论】:
-
您似乎收到此错误,因为
MyData2已绑定在外壳中。有关该问题的更多信息,请参阅this answer。 -
@legoscia - 不,这是一个新的,没有绑定
-
变量
ReturnCode、State、B或J是否已经绑定?这会导致类似的问题,因为它们将被左侧的绑定值替换。 -
如果我复制粘贴所有内容并在新的 shell 中执行它,匹配就完美了。它必须是一个变量绑定问题,就像我刚刚发布的那样......
-
与@maze-le 的结果相同:将所有内容复制并粘贴到新的外壳中,它工作正常。另外,请考虑一下:获得错误消息“右侧值不匹配”的唯一方法是左侧的某些内容已经具有与右侧不匹配的值.. .
标签: json erlang pattern-matching