This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3100SDK:HTTP 客户端、Jsmn 解析器、初始化 JSON 解析器失败

Guru**** 1777770 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/890276/cc3100sdk-http-client-jsmn-parser-failed-to-initiailze-json-parser

器件型号:CC3100SDK

您好!

在向 HTTP 服务器(api.thinspeak.com)发出请求后、我在解析 JSON 方面遇到问题。  它说初始化 JSON 解析器失败。 当我尝试对其进行调试时,jsmn_pars()函数会以值0退出。 我希望服务器返回一个 JSON 有效载荷、如下图所示(当我尝试使用 postman 时)。  

当我使用原始的 http_client 演示(使用 httpbin.org 作为服务器)时、不会发生此问题。 已成功解析 JSON。  

这使我感到困惑、因为两台服务器都返回 JSON 有效载荷。

如果有人能帮助我、我将不胜感激。 谢谢你

祝你一切顺利、

Ikhwan

代码涉及:

/*!
此函数将解析 JSON 数据

\param[in] PTR -指向 JSON 数据的指针

返回 0表示成功、否则为-ve

注意

\warning
*/
_i32 ParseJSONData (_i8 * ptr)
{
_i32 RetVal = 0;
_i32 noOfToken;
jsmn_parser 解析器;
jsmntok_t *标记列表;
_i8 printBuffer[4];

/*初始化 JSON 解析器*/
jsmn_init (&parser);

/*获取流中 JSON 令牌的数量,因为我们不知道需要传递多少个令牌*/
noOfToken = jsmn_parse (&parser、(const char *) ptr、strlen ((const char *) ptr)、NULL、10);
if (noOfToken <= 0)
{
CLI_Write ("初始化 JSON 解析器失败\n\r\n);
返回-1;

}

/*分配内存以存储令牌*/
tokenList =(jsmntok_t *) malloc (noOfToken* sizeof (jsmntok_t));
if (tokenList ==空)
{
cli_Write ("分配内存失败\n");
返回-1;
}

/*再次初始化 JSON 解析器*/
jsmn_init (&parser);
noOfToken = jsmn_parse (&parser、(const char *) ptr、strlen ((const char *) ptr)、tokenList、noOfToken);
if (noOfToken < 0)
{
cli_Write (" Failed to parse JSON tokents\n\r");
RetVal = noOfToken;
}
其他
{
cli_Write("成功解析");
// sprintf ((char *) printBuffer、"%ld"、noOfToken);
cli_Write ((_u8 *) printBuffer);
cli_Write (" JSON 令牌\n\r\n);
}

FREE (tokenList);

返回 RetVal;
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    穆罕默德

    您能否通过函数进行调试   jsmn_init(&parser) and see where your error is?

    BR、

    Vince