从char响应缓冲区中提取JSON文本

时间:2015-02-26 19:19:57

标签: c json

我从Wi-Fi模块收到大量文字。

哪个保存在我的响应缓冲区中。

char wifiResponseBuffer[500];

内容如下:

AT+CIPSEND=84

> GET http://api.noteu.co.uk/v1/poll/get/?seria
SEND OK

+IPD,308:{"data":[{"line1":"   Facebook Note    ","line2":"Nathan Weighill also","line3":" commented on Harry ","line4":" Bailey's photo.","beep":1,"received_time":1424976639},{"line1":"   Gmail Message    ","line2":"","line3":"Noteu Error","line4":"","beep":1,"received_time":1424976640}],"summary":{"note_count":2}}
OK

OK
Unlink

我有一个JSON解析器库但是需要在解析之前从响应中提取实际的JSON文本。这是第一次出现{并且最后一次出现}。 我可以在C中使用哪些字符串函数组合来查找这些字符的索引,然后提取JSON文本。

非常感谢任何帮助,

杰克

1 个答案:

答案 0 :(得分:0)

strchr用于查找字符串中第一次出现的字符。 strrchr找到了最后一个。

以下是如何使用这些内容的简短示例:

int test(void)
{
    char wifiResponseBuffer[500];
    int wifi_len;

    // get the WiFi data, leaving 1 byte for a NUL terminator
    wifi_len = get_wifi_response(wifiResponseBuffer, sizeof(wifiResponseBuffer)-1);
    if (wifi_len < 0)
        return -1;          // error

    // NUL-terminate to use with strxxx functions
    wifiResponseBuffer[wifi_len] = '\0';  

    // Find start of JSON data
    const char *json_start = strchr(wifiResponseBuffer, '{');
    if (json_start == NULL)
        return -1;
    json_start++;  // advance past {

    // Find end of JSON data
    const char *json_end = strchr(json_start, '}');
    if (json_end == NULL)
        return -1;

    // Pass the JSON data to the library
    size_t json_len = json_end - json_start;

    do_something_with_json_data(json_start, json_len);
}