2014-04-06 254 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中使用正则表达式的网页进行搜索,就可以得到它。 –