【问题标题】:Parse JSON message manually in C在 C 中手动解析 JSON 消息
【发布时间】:2023-03-30 11:53:01
【问题描述】:

我需要在没有外部库的情况下手动解析来自服务器的JSON 消息,位于C language

来自服务器的消息如下:

{[CR+LF]
"Tmg": "R",[CR+LF]
"STP": 72[CR+LF]
}[CR+LF]

{[CR+LF]
"Tmg": "R",[CR+LF]
"STP": 150[CR+LF]
}[CR+LF]

我需要STP: 后面的号码。每个消息结构中的数字都不同,因此我需要从 JSON 结构中获取该数字。我不能使用外部库,因为此代码在嵌入式系统中,并且不允许使用外部代码。

我尝试了以下方法:

int main (){
    const char response_message[35] = "{\r\n\"Tmg\":\"R\",\r\n\"STP\":72,\r\n}";
    const char needle[8] = "P\":";
    char *ret;

    ret = strstr(response_message, needle);

    printf("The number is: %s\n", ret);

return 0;
}

但显然,我得到了这个结果:

The number is: P":72,
}

所以我只需要得到号码,我怎样才能得到这个?

谢谢

【问题讨论】:

  • 太宽泛了!堆栈溢出不是我的工作!你可以使用strtok()
  • 您可以使用正则表达式来定义一些字符串模式并从该模式中获取特定信息。请探索 C 语言的正则表达式库。

标签: c json parsing


【解决方案1】:

您可以使用破解的解决方案。使用 strstr () 查找“STP”:然后查找以下 , 或 } 并提取其间的数字。

这是一个技巧。不保证工作。对于可以保证工作的东西,您可以使用 JSON 解析器。

【讨论】:

  • 真正的问题是消息是如何生成的,以及它的结构的哪些部分得到保证。如果它是以这种方式显式生成的,而不是通过使用高级结构和 JSON 库(如果它只是碰巧看起来像 JSON 消息,则不同的说法),这不是一个 hack,而是一个专用的解析器。
猜你喜欢
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2018-11-20
相关资源
最近更新 更多