c语言手动解析这样的json失败{"topic":"stm32/read/db0a1cfa6f2f4920a894fda1a69647d3","payload":{"TickCount":"20"}}
时间: 2024-04-21 12:21:31 浏览: 177
在C语言中,手动解析JSON可以通过字符串操作和逐个解析的来实现。下面是一个简单的示例代码,用于解析你供的JSON字符串:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义JSON键值对的结构体
typedef struct {
char key[50];
char value[50];
} KeyValuePair;
// 解析JSON字符串
void parseJson(const char* jsonStr, KeyValuePair* result) {
// 查找key的起始位置
const char* keyStart = strchr(jsonStr, '\"') + 1;
const char* keyEnd = strchr(keyStart, '\"');
int keyLength = keyEnd - keyStart;
strncpy(result->key, keyStart, keyLength);
result->key[keyLength] = '\0';
// 查找value的起始位置
const char* valueStart = strchr(keyEnd + 1, '\"') + 1;
const char* valueEnd = strchr(valueStart, '\"');
int valueLength = valueEnd - valueStart;
strncpy(result->value, valueStart, valueLength);
result->value[valueLength] = '\0';
}
int main() {
const char* jsonStr = "{\"topic\":\"stm32/read/db0a1cfa6f2f4920a894fda1a69647d3\",\"payload\":{\"TickCount\":\"20\"}}";
KeyValuePair result;
parseJson(jsonStr, &result);
printf("Key: %s\n", result.key);
printf("Value: %s\n", result.value);
return 0;
}
```
这段代码会输出以下结果:
```
Key: topic
Value: stm32/read/db0a1cfa6f2f4920a894fda1a69647d3
```
请注意,这只是一个简单的示例,仅适用于解析你提供的JSON字符串中的第一层键值对。如果JSON字符串更加复杂,你可能需要使用更复杂的算法或者使用现有的JSON解析库来完成解析。
阅读全文