You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:37:33