JSON:我可以在 JSON 中使用替代分隔符“,”吗?

问题描述

我在调制解调器上使用 AT 命令将 JSON 数据包传递给 MQTT 代理。 发布字符串的AT命令使用逗号分隔传递给命令的参数,所以当我发送

AT#MQPUBS=1,topic_2,{"Name":"Andrew"},{"Location":"UK"},{"Age":"51"}

出现错误

JSON 标准是否允许逗号分隔符与另一个字符交换?

解决方法

您问错了问题,JSON 语法不是这里的主要问题。你的问题是 AT 命令语法。

AT#MQPUBS=1,topic_2,{"Name":"Andrew"},{"Location":"UK"},{"Age":"51"}

这绝对不是有效的 AT 命令语法。 AT命令只有两种参数,数字字符串。字符串应该始终在开头和结尾用双引号括起来。来自 V.250 standard(这是 everyone working with AT commands 需要读取的 AT 命令标准):

5.4.2.2 字符串常量 ... 字符串常量 应以双引号字符开始和结束...双引号字符,用作开始和结束字符串分隔符, 应在字符串常量中表示为“\22”。

因此,上面的 topic_2 参数在没有周围引号的情况下根本不是有效的字符串。如果您仔细阅读 AT#MQPUBS 命令的文档,它应该说明第二个参数是字符串类型。看看它,第一个参数实际上也是一个字符串。

要将整个命令行转换为有效的语法,它应该是

AT#MQPUBS="1","topic_2","{\22Name\22:\22Andrew\22},{\22Location\22:\22UK\22},{\22Age\22:\2251\22}"

尽管那时您可能会开始研究 JSON 语法,因为我认为您更愿意使用 "{{\22Name\22: ... :\2251\22}}"。


PS 另请注意,几乎所有字符串都需要进行 AT+CSCS 转换(存在一些例外情况,但文档应该明确说明这一点,而 AT#MQPUBS 不是这样的例外)。>