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.

[参考译文] CC3220:JSON 解析错误-200

Guru**** 2553360 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/741352/cc3220-json-parse-error--200

器件型号:CC3220

我遇到-202解析错误、您可以看看为什么吗?

json_parse (jsonObjHandle、data、

         strlen(数据));

其中:

Data={“持续时间”:2}, 是 httpTask()的 http GET 响应;在 SDK 的 http GET 示例中。 这里的代码中没有任何变化。 我得到 UART 打印的{"Duration":2}。

对于上述情况、JSON_PARIS 将返回-200。

我通过将数据设置为宏来尝试的相同操作、并将返回'0 '已完成。

示例:

#define NEWDATA{"Duration":2}

json_parse (jsonObjHandle、NEWDATA、

         strlen (NEWDATA );//这将返回'0'

我的服务器仅响应 JSON、我能不能知道这里有什么问题?

如需更多信息、请参阅以下代码:

1
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18
19.
20.
21.
22.
23
24
25
26
27.
28.
29.
30
31.
32
33.
34
35.
36.
37.
38.
39.
40
41.
42.
43.
44.
45.
46.
47.
48
49
50
51.
52.
53.
54
55
56.
57.
58.
59.
60
61.
62.
63.
64
65
66
67
68
69
70
71.
72.
73.
74.
75
76.
77
78
79
80
81.
82.
83.
84
85.
86
87
88
89
boolmoreDataFlag = false;
   chardata[HTTP_MIN_RECV];
   int16_t ret = 0;
   int16_t len = 0;
 
   Display_printf(display, 0, 0, "Sending a HTTP GET request to '%s'\n",
                  HOSTNAME);
 
   HTTPClient_Handle httpClientHandle;
   int16_t statusCode;
   httpClientHandle = HTTPClient_create(&statusCode,0);
   if(statusCode < 0)
   {
       printError("httpTask: creation of http client handle failed",
                  statusCode);
   }
 
   ret =
       HTTPClient_setHeader(httpClientHandle,
                            HTTPClient_HFIELD_REQ_USER_AGENT,
                            USER_AGENT,strlen(USER_AGENT),
                            HTTPClient_HFIELD_PERSISTENT);
   if(ret < 0)
   {
       printError("httpTask: setting request header failed", ret);
   }
 
   ret = HTTPClient_connect(httpClientHandle,HOSTNAME,0,0);
   if(ret < 0)
   {
       printError("httpTask: connect failed", ret);
   }
 
   ret =
       HTTPClient_sendRequest(httpClientHandle,HTTP_METHOD_GET,REQUEST_GET_URI,
                              NULL,0,
                              0);
 
   if(ret < 0)
   {
       printError("httpTask: send failed", ret);
   }
 
   if(ret != HTTP_SC_OK)
   {
       printError("httpTask: cannot get status", ret);
   }
 
   Display_printf(display, 0, 0, "HTTP Response Status Code: %d\n", ret);
 
   len = 0;
   do
   {
       ret = HTTPClient_readResponseBody(httpClientHandle, data, sizeof(data),
                                         &moreDataFlag);
 
       if(ret < 0)
       {
           printError("httpTask: response body processing failed", ret);
       }
       Display_printf(display, 0, 0, "%.*s \r\n",ret,data);
       strcpy(builtBuff, data);
 
       // JSON Parse Start //
 
       createHttpGetTemplate();
       createHttpGetObject();
       parseHttpGet(data);
       getValueHttpGet();
 
       // JSON Parse End //
 
       len += ret;
   }
   while(moreDataFlag);
 
   Display_printf(display, 0, 0, "Received %d bytes of payload\n", len);
 
   ret = HTTPClient_disconnect(httpClientHandle);
   if(ret < 0)
   {
       printError("httpTask: disconnect failed", ret);
   }
 
   HTTPClient_destroy(httpClientHandle);
 
 
 
   return(0);

有关 json 解析的信息、请参见下面的

1
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18
19.
20.
21.
22.
23
24
25
26
27.
28.
29.
30
31.
32
33.
34
35.
36.
37.
38.
39.
40
41.
42.
43.
44.
45.
46.
47.
48
49
voidcreateHttpGetTemplate(void)
{
    int16_t retVal;
    char*templatestr = "{"
            "\"Duration\":int32}";
    templateSize = strlen(templatestr);
    Display_printf(display, 0, 0, "str size = %d \n", strlen(templatestr));
    retVal = Json_createTemplate(&templateHandle,
                                 templatestr,
                                  templateSize);
    Display_printf(display, 0, 0, "Json_createTemplate = %d \n", retVal);
}
voidcreateHttpGetObject(void)
{
    int16_t retVal;
    /* convert object size received from uart into integer */
    objSize = 1024;   //  atoi(objSizeBuffer);
    retVal = Json_createObject(&jsonObjHandle,templateHandle,objSize);
    Display_printf(display, 0, 0, "Json_createObject = %d \n", retVal);
}
voidparseHttpGet(char*buf)
{
    int16_t retVal;
    retVal =
        Json_parse(jsonObjHandle,buf,
                   strlen(buf));
    Display_printf(display, 0, 0, "Json_parse = %d \n", retVal);
}
voidgetValueHttpGet(void)
{
    int16_t retVal;
    char*key =  "\"Duration\"";
    uint32_t   value;
    uint16_t valueSize = 4;
    retVal = Json_getValue(jsonObjHandle,key,&value,&valueSize);
    Display_printf(display, 0, 0, "Json_getValue = %d \n", retVal);
    Display_printf(display, 0, 0, "Received Duration = %d \n", value);
}
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您能否澄清您是否收到错误-200 (JSON_RC__NOT _未找到)或错误-202 (JSON_RC__VALUE NOT _有效)?

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

    我一段时间没有听到您的反馈、因此我假设您已解决了您的问题。 请在此处提问更多问题、或者在锁定此主题时打开新主题。

    此致、
    Kristen
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Kristen、
    很抱歉、我做了其他工作。
    错误-202 (JSON_RC__value_not _valid)、这是我得到的结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我看到您在上一个主题中发布了相同的问题: e2e.ti.com/.../739279

    正如我的同事所建议的、您是否尝试通过添加中的 C 文件来调试库本身 将\sources\ti\utils\json\sources\to 您的应用程序源?

    此致、
    Kristen