Erlang 保留字符串表示法
Erlang keep string notation
我有以下内容:
Body = "{\"auth\": {\"tName\": \"str1\", \"passwordCredentials\": {\"username\": \"u\", \"password\": \"p\"}}}"
我使用的数据无法硬编码;我需要根据变量 TName = "str1"
、UName="u"
和 Password="p"
:
构建 Body
我试过了:
Body = "{\"auth\": {\"tName\": TName, \"passwordCredentials\": {\"username\": UName, \"password\": Password}}}"
但是使用这种方法 Body
构建不正确。如何使用变量来构建它?
Erlang 没有任何一种string interpolation。你可以做到
Body = "{\"auth\": {\"tName\": " ++ TName ++ ", \"passwordCredentials\": {\"username\": " ++ UName ++ ", \"password\": " ++ Password ++ "}}}"
或
Body = lists:append(["{\"auth\": {\"tName\": ", TName, ", \"passwordCredentials\": {\"username\": ", UName, ", \"password\": ", Password, "}}}"])
(如果您需要在 TName
和其余部分周围添加引号,请以明显的方式进行更改。)
好多了,而不是像这样构造一个字符串(你真的想处理所有的 \"
,包括右大括号等等吗?),写一个简单的函数,它会接受一个 Erlang 术语喜欢 [{auth, [{tName, TName}, {passwordCredentials, [{userName, UName}, {password, Password}]]]
并从中构建 JSON 字符串(我建议使用 binaries instead of strings for TName
etc., since Erlang strings are just lists of numbers, and you may want to have lists of numbers in your term which aren't strings). Or use an existing JSON library (see What is the most mature JSON library for Erlang 以获得一些建议),特别是如果您不仅需要构建 JSON 而是将其解析为嗯。
为了制作 JSON 我肯定会使用一些 JSON 库:
body(TName, UName, Password) ->
jiffy:encode({
[{<<"auth">>, {
[{<<"tname">>, iolist_to_binary(TName)},
{<<"passwordCredentials">>, {
[{<<"username">>, iolist_to_binary(UName)},
{<<"password">>, iolist_to_binary(Password)}]
}}]
}}]
}).
我有以下内容:
Body = "{\"auth\": {\"tName\": \"str1\", \"passwordCredentials\": {\"username\": \"u\", \"password\": \"p\"}}}"
我使用的数据无法硬编码;我需要根据变量 TName = "str1"
、UName="u"
和 Password="p"
:
Body
我试过了:
Body = "{\"auth\": {\"tName\": TName, \"passwordCredentials\": {\"username\": UName, \"password\": Password}}}"
但是使用这种方法 Body
构建不正确。如何使用变量来构建它?
Erlang 没有任何一种string interpolation。你可以做到
Body = "{\"auth\": {\"tName\": " ++ TName ++ ", \"passwordCredentials\": {\"username\": " ++ UName ++ ", \"password\": " ++ Password ++ "}}}"
或
Body = lists:append(["{\"auth\": {\"tName\": ", TName, ", \"passwordCredentials\": {\"username\": ", UName, ", \"password\": ", Password, "}}}"])
(如果您需要在 TName
和其余部分周围添加引号,请以明显的方式进行更改。)
好多了,而不是像这样构造一个字符串(你真的想处理所有的 \"
,包括右大括号等等吗?),写一个简单的函数,它会接受一个 Erlang 术语喜欢 [{auth, [{tName, TName}, {passwordCredentials, [{userName, UName}, {password, Password}]]]
并从中构建 JSON 字符串(我建议使用 binaries instead of strings for TName
etc., since Erlang strings are just lists of numbers, and you may want to have lists of numbers in your term which aren't strings). Or use an existing JSON library (see What is the most mature JSON library for Erlang 以获得一些建议),特别是如果您不仅需要构建 JSON 而是将其解析为嗯。
为了制作 JSON 我肯定会使用一些 JSON 库:
body(TName, UName, Password) ->
jiffy:encode({
[{<<"auth">>, {
[{<<"tname">>, iolist_to_binary(TName)},
{<<"passwordCredentials">>, {
[{<<"username">>, iolist_to_binary(UName)},
{<<"password">>, iolist_to_binary(Password)}]
}}]
}}]
}).