Erlang中转义含多键值对JSON字符串双引号的问题与解决
Erlang中JSON字符串双引号转义的问题与解决
问题背景
我有一段JSON字符串:
{"Timestamp":"2025-02-18T10:20:37.144Z","Values":{"Slave 1 (EL1008).Channel 1.Input":true,"Slave 1 (EL1008).Channel 2.Input":false},"MetaData":{}}
一开始我在Erlang模块里写了这样的转义函数:
escape_quotes(Json) -> re:replace(Json, "\"", "\\\"", [global, {return, list}]).
但调用时直接传入未加引号的JSON结构表达式,触发了* 1:25: illegal expression语法错误,没能得到预期结果。
适配emqtt的解决方案
为了处理emqtt服务器返回的JSON订阅消息,我改用string:replace/3实现转义,代码如下:
handle_info({subscribe, #{topic := Topic, payload := Payload}}, State) -> NewPayload = string:replace(Payload, "\"", "\\\"", all), io:format("Received message on topic ~s: ~s~n", [Topic, NewPayload]), {noreply, State};
方案优势
如果用sed、awk这类外部脚本来处理,会导致Erlang进程性能下降甚至崩溃,所以用Erlang内置函数处理是更优的选择。
内容的提问来源于stack exchange,提问作者Alberto Perri
相关产品推荐
相关产品推荐

