JSON Arduino 中的格式

JSON format in Arduino

如果我直接输入值,我有一个代码可以正常工作,但我当前的系统是这样的,这些值必须改变。请参阅下面的代码。

char http_cmd[] =  "POST /tracker/ HTTP/1.1\r\nContent-Type: application/json\r\nContent-Length: 38\r\nHost: haul1.herokuapp.com\r\n\r\n{ \"trackerId\": \"2222\",\"height\": \"42\" }";

// this works fine

但我想将值作为变量输入,所以我做了这样的事情

String tracker = "2222";
String height = "42";
char http_cmd[] =  "POST /tracker/ HTTP/1.1\r\nContent-Type: application/json\r\nContent-Length: 38\r\nHost: haul1.herokuapp.com\r\n\r\n{ \"trackerId\": \""+tracker+"\",\"height\": \""+height+"\" }"; 

这是我收到的错误消息

exit status 1
initializer fails to determine size of 'http_cmd'

谢谢 尝试。 我真正需要的是 Json 内容类型的可接受语法,我还需要知道如何获得 "http_cmd"

的确切大小

此时这将被视为字符串连接。 + 运算符将 return 键入 String 而不是 char[]。您是否尝试过先在单独的变量中创建字符串并对其调用 .c_str()

据我所知,如果您跳过所有附加在它之前的 http 内容,json 语法本身看起来不错。

您的代码实际上有两个错误。您看到的错误是因为您创建了一个 char 数组但没有指定长度。还有另一个错误,字符串与 + 的连接是 Arduino 字符串库的一部分,它不是 c++ 的一部分,因此不是数据类型 char 的有效运算符。

有两种方法,1) 使用字符串库中的字符串连接运算符 +(您只需将代码从 char http_cmd[] 更改为 String http_cmd); 2)使用字符数组。但通常认为使用 char 数组比使用 String 库更安全。您可以使用 sprintf() 创建字符串数组,这适用于 Arduino 中除浮点数以外的所有数据类型。

为了便于计算json有效负载的长度和可读性,最好将命令分成几个字符串。顺便说一句,我假设 trackerheight 实际上是 int 可以直接在 JSON 中编码。

int tracker = 2222;
int height = 42;

// create json payload
char json[30];
sprintf(json, "{\"trackerId\":%d,\"height\":%d}", tracker, height);

char http_post_request[] = "POST /tracker/ HTTP/1.1\r\n";
char http_content_type[] = "Content-Type: application/json\r\n";

// calculate payload length
char http_content_length[20];
sprintf(http_content_length, "Content-Length:%lu\r\n", strlen(json));
char http_host[] = "Host: haul1.herokuapp.com\r\n\r\n";