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.

[参考译文] 编译器/LAUNCHCC3220MODASF:JSON 对象阵列

Guru**** 2589280 points
Other Parts Discussed in Thread: CC3220SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/811121/compiler-launchcc3220modasf-json-object-arrays

器件型号:LAUNCHCC3220MODASF
主题中讨论的其他器件:CC3220SF

工具/软件:TI C/C++编译器

您好!

我使用 cc3220modaSF 模块并尝试构建有关 json 的新项目。 除了 json 分析器、一切都还可以、但我对 JSON 解析有问题。  

我检查了 json_app 演示项目和 utils 文件夹中的驱动程序、但有一个问题:jsonset 或 jsonget alghoritms、string、布尔值、int32等 json 参数是可以的、但看不到关于 json 数组的任何信息。 我有一个 json 数组、如下所示。  

如何使用此库解析此 json 对象? 这是一个 json 对象数组、我不知道我将获得多少个密钥和值(实际上是 json 对象)。

谢谢、此致。

Taylan。

{\"
菜单\" :[\
{\"id\":\"item1\"、\"name\":\"name1\"}、\
{\"id\":\"item2\"、\"name\":\"name2\"}、\
{\"id\":\"item3\"、\"name\":\"name3\"}\
]、\
} 

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

    此外、还有其他信息、我可以解析类似的内容、问题是有关数组的。

    {
    "data":"input"、
    "param":"test param"、
    "value":{
    "ID":"valueID",
    「数目」:11,
    “测试”:-12,
    },
    “错误”:{
    “code”(代码):200,
    “消息”:“msgStr”
    ,},
    } 

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

    您好 Taylan、

    您应该能够使用 JSON_getArrayMembersCount() API 来检索给定密钥中的数组元素数量。 有关如何使用它的更多信息、请访问:

    http://software-dl.ti.com/ecs/SIMPLELINK_CC32XX_SDK/3_10_00_04/exports/docs/tiutils/html/group__ti__utils__json__JSON.html#gaebaae615c0d88757b1bf55c58dd42d11

    我还建议查看{SIMPLELINK_CC32XX_SDK}/examples/rtos/CC3220SF_LAUNCHXL/tiutils/json 下的 JSON 示例、因为这可以帮助您更好地了解 JSON 库 API。

    希望这有所帮助、
    Gerardo

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

    你(们)好 Gerardo。  

    让我们来讨论文档 getArrayMembersCount 中给出的示例。 有一个名为 h 的对象句柄。h 需要有一个对象模板。 对于模板、给定的汽车价值应该是原始的、字符串的或其他任何东西? 因为原始需要{...} 。} 字符、并且无法解析数组类型。  

    我还是分享了下面的示例。  

    谢谢、此致。

    Taylan。  

    uint16_t ret;
    uint16_t arrayCount;
    char * jsonBuf ="{"}
    "\"名称\":\"约翰\"、"
    "\"年龄\":30、"
    "\"汽车型号\":[\"丰田\"、\"菲亚特\"、\"沃尔沃\"};
    char *键="\"汽车型号\";
    ret = JSON_parse (h、jsonBuf、strlen (jsonBuf));
    arrayCount = JSON_getArrayMembersCount (h、 键); 

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

    您好 Taylan、

    在该示例中、汽车模型的值以字符串的形式给出。 该模板也可在文档中找到:

    uint16_t ret;
    JSON_Handle 模板 Handle1;
    char *模板 str ="{"}
    "\"名称\":字符串、"
    "\"年龄\":Int32、"
    "\"汽车型号\":[string、string、string]}";
    ret = JSON_createTemplate (&templateHandle1、templatestr、
    strlen(模板); 

    我再次建议查看 examples/rtos/CC3220SF_LAUNCHXL/tiutils/json 下的 json 示例。 该示例解析包含对象数组的 JSON:

    #define Example_JSONBUF "
    {"}
    \...
    "\"电话号码\":\" \
    "{"} \
    "\"类型\":\"主页\"、" \
    "\"号码\":\"212 555-1234" \
    "}、" \
    "{"} \
    "\"类型\":\"办公室\"、" \
    "\"号码\":\"646 555-4567\" \
    "}、" \
    "{"} \
    "\"类型\":\"移动\"、" \
    "\"号码\":\"123 456-7890\" \
    "}" \"]"
    、"
    \...
    "}" 

    该模板如下所示:

    #define example_template "
    {"}
    \...
    "\"电话号码\":\" \
    "{"} \
    "\"类型\":字符串、" \
    "\"号码\":字符串" \
    "}、" \
    "{"} \
    "\"类型\":字符串、" \
    "\"号码\":字符串" \
    "}、" \
    "{"} \
    "\"类型\":字符串、" \
    "\"号码\":字符串" \
    "}" \"]"
    、"
    \...
    "}"
    

    并使用以下方法对其进行解析:

    /*确定存在多少个电话号码*/
    phonNumbers = JSON_getArrayMembersCount (hObject、"\" phonNumber\");
    
    /*打印移动电话号码*/
    对于(i = 0;i < phoneNumbers;i++){
    sprintf (keyBuf、"\" phoneNumber\"。[%d].\"类型\"、i);
    
    valueSize = sizeof (phonetype);
    memset (phonetType、0、valueSize);
    
    RetVal = JSON_getValue (hObject、keyBuf、phonType、valueSize);
    
    。}
    

    希望这有所帮助、
    Gerardo