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 模板创建错误

Guru**** 2553260 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/739279/cc3220-json-template-create-error

器件型号:CC3220

大家好、我正在尝试通过将 SDK 中的 JSON 应用作为参考并获取错误代码来执行 JSON 构建。请在下面致电并附上 sourcee2e.ti.com/.../3162.httpget.c

Display_printf (display、0、0、"JSON Start \n");

createTemplate();

CreateObject();

SetValue();

build();

display_printf (display、0、0、"JSON end \n");

结果:

JSON 开始

JSON_createTemplate =-102

JSON_CreateObject =-301

JSON_setValue =-302

JSON_BUILD =-302

JSON 结束

同样、如果其他任何方法也很好。

谢谢你

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

    -102表示解析失败(请参阅"json_engine.h")
    您要解析的字符串是什么?

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

    您好、Kobi、

    请查找此附件e2e.ti.com/.../JSONtest.c

    很抱歉、第一个帖子中的连接错误。

    谢谢你

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

    您提供的模板缓冲区(createTemplate 中的"test")不符合 JSON 库预期。 请参阅 JSON_createTemplate 的文档(例如、在头文件中)。

    BR、
    Kobi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Kobi、
    感谢您提出的编写建议、我将获得以下代码行中的成功代码:
    char *模板 str ="{"}
    "\"温度\":Int32、"
    "\"湿度\":Int32、"
    "\"摄氏度\":Int32、"
    "\"法伦特\":Int32、"
    "\" MacID\":字符串}";
    模板大小= strlen (模板);
    display_printf (display、0、0、"str size =%d \n"、strlen (templatestr));
    RetVal = JSON_createTemplate (&templateHandle、
    模板,
    模板尺寸);

    模板正在创建、对象也在创建。
    如何处理浮点值、我用浮点替换了上面的 Int32。 JSON_createTemplate 再次返回-102。
    例如:
    char *模板 str ="{"}
    "\"温度\":浮动、"
    "\"湿度\":Int32、"
    "\"摄氏度\":Int32、"
    "\"法伦特\":Int32、"
    "\" MacID\":字符串}";
    模板大小= strlen (模板);
    display_printf (display、0、0、"str size =%d \n"、strlen (templatestr));
    RetVal = JSON_createTemplate (&templateHandle、
    模板,
    模板尺寸);
    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Raghunandana DS:

    不支持"float"。

    请参阅下表(来自 parse_common.c)以了解有效类型:

    静态常量 string_dictionary_TgPropertyTypeSpecifier[]=

    { lit_string_and_LEN ("int32"),property_type__Int32 } 、
    { lit_string_and_LEN ("uint32"),property_type__uint32} 、
    { lit_string_and_LEN ("string"),property_type__string } 、
    { lit_string_and_LEN ("rain"),property_type__raw } 、
    {literal_string_and_LEN ("布尔")、property_type__Boolean} 、
    { lit_string_and_LEN ("real32"),property_type__REAL32__base },
    {literal_string_and_LEN ("ureal32")、property_type__UREAL32__base}、
    {字典_default_at_end,0 ,property_type__unknown }
    };

    您可以尝试使用"real32"-尽管我找不到任何有关如何使用它的示例。
    我们将在即将推出的 SDK 版本中添加缺少的文档。

    一个更简单的选项是使用整数(作为尾数和指数)。

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

    您好、Kobi、

    我遇到-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、我能不能知道这里有什么问题?

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


    bool MoreDataFlag = false; char data[HTTP_MIN_RECV]; int16_t ret = 0; int16_t len = 0; display_printf (display、0、0、"向'%s'发送 HTTP GET 请求\n"、 主机名); HttpClient_handle httpClientHandle; int16_t statusCode; httpClientHandle = HttpClient_create (&statusCode、0); if (statusCode < 0) { printError ("httpTask:创建 http 客户端句柄失败"、 状态代码); } RET = HttpClient_setHeader (httpClientHandle、 HttpClient_HFIELD_REQ_USER_AGENT、 USER_AGENT、strlen (USER_AGENT)、 HttpClient_HFIELD_PERSISTENT); if (ret < 0) { printError ("httpTask:设置请求标头失败"、ret); } RET = HttpClient_connect (https://ClientHandle、HOSTNAME、0、0); if (ret < 0) { printError ("httpTask: connect failed"、ret); } RET = HttpClient_sendRequest (httpClientHandle、HTTP_METHOD_Get、Request_Get_URI、 空、0、 0); if (ret < 0) { printError ("httpTask: send failed"、ret); } if (ret!= HTTP_SC_OK) { printError ("httpTask:无法获取状态"、ret); } display_printf (display、0、0、"HTTP 响应状态代码:%d\n"、ret); Len = 0; 操作 { RET = HttpClient_readResponseBody (httpClientHandle、data、sizeof (data)、 MoreDataFlag (&M); if (ret < 0) { printError ("httpTask: Response body processing failed"、ret); } display_printf (display、0、0、"%.*s \r\n"、ret、data); strcpy (builtBuff、data); // JSON 解析开始// createHttpGetTemplate(); createHttpGetObject(); parseHttpGet (data); getValueHttpGet (); // JSON 解析结束// len += ret; } while (moreDataFlag); display_printf (display、0、0、"接收到的有效载荷%d 字节\n"、len); RET = HttpClient_ddisconnect (httpClientHandle); if (ret < 0) { printError ("httpTask: disconnect failed"、ret); } HttpClient_Destroy (httpClientHandle); 返回(0);

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

    void createHttpGetTemplate (void)
    {
    int16_t RetVal;
    char *模板 str ="{"}
    "\"持续时间\":Int32}";
    模板大小= strlen (模板);
    display_printf (display、0、0、"str size =%d \n"、strlen (templatestr));
    RetVal = JSON_createTemplate (&templateHandle、
    模板,
    模板尺寸);
    
    Display_printf (display、0、0、"JSON_createTemplate =%d \n"、RetVal);
    }
    
    void createHttpGetObject (void)
    {
    int16_t RetVal;
    /*将从 UART 接收到的对象大小转换为整数*/
    objSize = 1024;// atoi (objSizeBuffer);
    RetVal = JSON_CreateObject (&jsonObjHandle、templateHandle、objSize);
    display_printf (display、0、0、"JSON_CreateObject =%d \n"、RetVal);
    }
    
    
    
    void parseHttpGet (char * buf)
    {
    int16_t RetVal;
    
    RetVal =
    json_parse (jsonObjHandle、buf、
    strlen(buf));
    display_printf (display、0、0、"JSON_parse =%d \n"、RetVal);
    }
    
    
    
    void getValueHttpGet (void)
    {
    int16_t RetVal;
    char *键="\"持续时间\";
    uint32_t 值;
    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、"接收持续时间=%d \n"、value);
    
    
    } 

    获取值中的一件事是得到正确的值。

    但我想知道解析时-202错误的原因。

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

    我知道当前库的文档缺失、并且错误代码似乎提供了足够的信息。
    我认为、解决此类问题的最快方法是调试库本身。
    可在中找到该代码 \source\ti\utils\json\source\。
    您可以将 C 文件添加到应用程序源并调试错误。

    BR、
    Kobi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Kobi:
    我也这样做了,我的应用程序没有进入 JSON_pars(),我尝试了断点以及 UART 打印。 JSON_pars()中没有发生任何情况。 调用 JSON_pars()之前和之后的打印正常。
    然后我震惊地打印了 JSON_pars()的返回值,并得到"0"。 我不知道这里发生了什么神奇。
    感谢您的建议。