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.

[参考译文] EK-TM4C1294XL:修复了 json.c 中 GetFieldValueString 函数的问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1387494/ek-tm4c1294xl-fix-for-getfieldvaluestring-function-in-json-c

器件型号:EK-TM4C1294XL

工具与软件:

在相关问题中、我遇到了 TI json.c example/template 中包含的函数 GetFieldValueString 的问题。 我们最终发现了与双引号的初始搜索相关的问题。 根据 JSON 在发送端的结构、它可能会在引号前添加字符(空格、制表符、返回)"。 这将使第一个 if 语句失效。 这似乎发生了,甚至当我试图消除所有的空间,返回,等等发送端。 因此、我对代码做了细微修改。 指针将移动到下一个字符、直到找到引号、而不是返回-1并且如果在开头找不到双引号、则失败。 在它放弃之前我包含了20个字符的任意限制。 如果找不到双引号、这应该可以防止无限循环或溢出。  

配置 SDK 代码。 我已经测试了它,它似乎起作用(至少对我的目标。  

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/******************************************************************************
*
* This function searches for a value in a JSON item as quoted value. These
* values are quoted values so if the number is not a quoted value this
* function returns -1. If the quoted value is found then it is returned in
* the pcDataDest array.
*
*****************************************************************************/
int32_t
GetFieldValueString(tBufPtr *psBufPtr, char *pcDataDest, uint32_t ui32SizeDest) {
int32_t i32OutIdx;
uint8_t Idx_counter = 0; /* Counter to prevent infinite loop. */
while (Idx_counter < 20) {
/* String value starts with double quote " but this may not always be the
* first character. Look for " and then move on. */
if (BufData8Get(psBufPtr) == '"') {
/*Found start of the string with double quote. Reset the counter. Move
* to the next step*/
Idx_counter = 0;
break;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

---

Devon

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

    您好!

     我离开办公室到星期三。 在回来的时候、我会仔细研究你的问题。 很抱歉给您带来不便。  

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

    尊敬的 Devon:

     很高兴您解决了这个问题。 感谢您分享代码。 我相信这会对可能遇到同样问题的社区有所裨益。 我也会将此帖子加入书签、以供将来参考。