C++ 如何将JSON发布到web服务器?

C++ 如何将JSON发布到web服务器?,c++,json,linux,cloud,iot,C++,Json,Linux,Cloud,Iot,我正在玩freeboard.io,试图制作一个小部件,从URL[TBD]提取JSON数据。我的原始数据源来自一个运行Linux的基于iMX6的Wandboard,该Wandboard连接到internet。我想在一个打开Woad的C++程序上打开一个socket到[TBD],并发送UDP数据包,例如,包含我的传感器数据。我的JSON数据结构如下: { "sensor_a": 1100, "sensor_b": 247, "sensor_c": 0 } 你能帮我把我的JSON数据结构

我正在玩freeboard.io,试图制作一个小部件,从URL[TBD]提取JSON数据。我的原始数据源来自一个运行Linux的基于iMX6的Wandboard,该Wandboard连接到internet。我想在一个打开Woad的C++程序上打开一个socket到[TBD],并发送UDP数据包,例如,包含我的传感器数据。我的JSON数据结构如下:

{
  "sensor_a": 1100,
  "sensor_b": 247,
  "sensor_c": 0
}

<>你能帮我把我的JSON数据结构用C++在Ubuntu Linux上放到IP包中吗?例如,我知道如何将数据结构序列化为ascii格式,并构建一个缓冲区来填充IP数据包,但我想知道是否有一种标准的方法用于云服务,或者Azure与AWS是否会有所不同?是否需要某种类型的标题信息来放置数据?

这是一个非常简单的问题,就像所有简单的问题一样,不需要外部库来序列化等。正如上面@Galik所说,您的问题是如何将字符串从客户端发送到服务器。另外,对于你的情况,你需要一个JSON解析器在服务器上,从JSON页面中的任何C或C++分析器都可以,我使用GASON,因为它是快速和简单的。p> 在TCP/IP套接字编程中,您必须让另一部分知道要读取多少字节字符

我面临着类似的情况:通过web发送JSON。 下面是一个示例,一条JSON消息

在这种情况下,消息的大小具有此标头格式

nbr_bytes#json_string
其中,json_字符串是json文本,nbr_字节是json_字符串的字符数,是分隔符

服务器如何解析这个? 每次读取1个字符,直到找到分隔符,然后将该字符串转换为数字; 然后使套接字API读取nbr_字节字符并退出

范例

100#{json_txt....}
在本例中,json_txt有100个字符

下面是解析器的代码

std::string read_response(socket_t &socket)
{
  int recv_size; // size in bytes received or -1 on error 
  size_t size_json = 0; //in bytes
  std::string str_header;
  std::string str;

  //parse header, one character at a time and look for for separator #
  //assume size header lenght less than 20 digits
  for (size_t idx = 0; idx < 20; idx++)
  {
    char c;
    if ((recv_size = recv(socket.m_socket_fd, &c, 1, 0)) == -1)
    {
      std::cout << "recv error: " << strerror(errno) << std::endl;
      return str;
    }
    if (c == '#')
    {
      break;
    }
    else
    {
      str_header += c;
    }
  }

  //get size
  size_json = static_cast<size_t>(atoi(str_header.c_str()));

  //read from socket with known size
  char *buf = new char[size_json];
  if (socket.read_all(buf, size_json) < 0)
  {
    std::cout << "recv error: " << strerror(errno) << std::endl;
    return str;
  }
  std::string str_json(buf, size_json);
  delete[] buf;
  return str_json;
}

这是一个非常简单的问题,就像所有简单的问题一样,不需要外部库进行序列化等。正如上面@Galik所说,您的问题是如何将字符串从客户端发送到服务器。另外,对于你的情况,你需要一个JSON解析器在服务器上,从JSON页面中的任何C或C++分析器都可以,我使用GASON,因为它是快速和简单的。p> 在TCP/IP套接字编程中,您必须让另一部分知道要读取多少字节字符

我面临着类似的情况:通过web发送JSON。 下面是一个示例,一条JSON消息

在这种情况下,消息的大小具有此标头格式

nbr_bytes#json_string
其中,json_字符串是json文本,nbr_字节是json_字符串的字符数,是分隔符

服务器如何解析这个? 每次读取1个字符,直到找到分隔符,然后将该字符串转换为数字; 然后使套接字API读取nbr_字节字符并退出

范例

100#{json_txt....}
在本例中,json_txt有100个字符

下面是解析器的代码

std::string read_response(socket_t &socket)
{
  int recv_size; // size in bytes received or -1 on error 
  size_t size_json = 0; //in bytes
  std::string str_header;
  std::string str;

  //parse header, one character at a time and look for for separator #
  //assume size header lenght less than 20 digits
  for (size_t idx = 0; idx < 20; idx++)
  {
    char c;
    if ((recv_size = recv(socket.m_socket_fd, &c, 1, 0)) == -1)
    {
      std::cout << "recv error: " << strerror(errno) << std::endl;
      return str;
    }
    if (c == '#')
    {
      break;
    }
    else
    {
      str_header += c;
    }
  }

  //get size
  size_json = static_cast<size_t>(atoi(str_header.c_str()));

  //read from socket with known size
  char *buf = new char[size_json];
  if (socket.read_all(buf, size_json) < 0)
  {
    std::cout << "recv error: " << strerror(errno) << std::endl;
    return str;
  }
  std::string str_json(buf, size_json);
  delete[] buf;
  return str_json;
}

你可能想考虑卡萨布兰卡:是的,它确实支持Ubuntu、iOS、OSX和AndroidIt的声音,这个问题实际上是如何向服务器发送一个字符串。答案将取决于服务器的期望值。所以发布JSON数据没有标准格式?我有一个谷歌云服务帐户。我现在会选择将数据放在那里。我正在寻找的产品或功能是否像大多数云服务公司提供的那样被认为是云存储?哇!谷歌云平台有很多存储东西的方法。你可能想考虑卡萨布兰卡:是的,它确实支持Ubuntu、iOS、OSX和AndroidIt的声音,这个问题实际上是如何向服务器发送一个字符串。答案将取决于服务器的期望值。所以发布JSON数据没有标准格式?我有一个谷歌云服务帐户。我现在会选择将数据放在那里。我正在寻找的产品或功能是否像大多数云服务公司提供的那样被认为是云存储?哇!谷歌云平台有很多存储东西的方法。