2014-04-06 253 views
1

我想解析來自我的arduino中的網絡服務器的JSON響應,以打開和關閉LED燈。我正在使用WiFi client repeating example to make a GET request to my server解析JSON響應?

這裏就是我做的GET請求部分,並將其打印JSON響應到串行端口:

client.println("GET /abc/bze/ HTTP/1.1"); 
client.println("Host: www.abc.ca"); 
client.println("User-Agent: ArduinoWiFi/1.1"); 
client.println("Connection: close"); 
client.println(); 

我的JSON看起來像這樣

{"lightstatus":"on"} 

但是,我怎麼解析只有JSON響應才能使用它來控制我的LED?謝謝。

+0

的可能重複[是否有一個C++庫來讀取JSON文件轉換成C++對象?(http://stackoverflow.com/questions/6538725/is-there-ac-library-to-read-json -documents-into-c-objects) – lpapp

回答

2

如果你想分析一般的JSON,阻力最小的路徑是a good library

如果,但是,你只會收到像你的例子一樣簡單的事情,你可能會逃脫一個蹩腳的黑客。無可否認,以下是C,這對我來說在幾分鐘內最輕鬆,但我相信你沒有任何困難將它翻譯成C++

#include <stdio.h> 

#define BUFLEN (100) 

int main(void) { 
    char *json[] = { 
     "{\"lightstatus\":\"on\"}", 
     "{\"lightstatus\":\"off\"}", 
     "{\"foo\":\"bar\"}", 
     "{\"baz\":\"quux\"}" 
    }; 
    char key[BUFLEN]; 
    char val[BUFLEN]; 

    for(int i=0; i<sizeof(json)/sizeof(char *); i++) { 
     sscanf(json[i], "{\"%[^\"]\":\"%[^\"]\"}", key, val); 
     printf("The value of '%s' is '%s'\n", key, val); 
    } 

    return 0; 
} 
+0

您可以使用類似「JSON spirit」或「Casablanca」的庫。如果你不想使用它們,那麼上面的C代碼可以用C++ 11風格的正則表達式翻譯成幾行。這很簡單。只需在C++ 11中使用正則表達式的網頁進行搜索,就可以得到它。 –