2016-03-06 12 views
0

我想通過wifi解析Pi服務器上的JSON數組。我想分析一下:如何在arduino IDE中解析json數組

[{「Device」:「Curtain」,「Value」:「1」},{「Device」:「Fan」,「Value」:「1」}, { 「設備」: 「窗簾」, 「值」: 「0」},{ 「設備」: 「繼電器」, 「值」: 「0」}]

那些是從網頁複製:http://pi.access.com/states.php

以下是我的Arduino代碼。

#include <ArduinoJson.h> 

void setup() { 
    Serial.begin(9600); 
    while (!Serial) { 
    // wait serial port initialization 
    } 

    StaticJsonBuffer<200> jsonBuffer;  

    char json[] = 
    "[{\"Device\":\"Curtain\",\"Value\":\"1\"},{\"Device\":\"Fan\",\"Value\":\"1\"}]"; 


    JsonArray& root = jsonBuffer.parseArray(json); 

    // Test if parsing succeeds. 
    if (!root.success()) { 
    Serial.println("parseObject() failed"); 
    return; 
    } 

    // Fetch values. 

    const char* device[] = root["Device"]; 
      int value[] = root["Value"]; 

    // Print values. 
    Serial.println(device); 
    Serial.println(value); 

} 

後來我有一堆錯誤......

JsonParseExample.ino: In function 'void setup()': 
JsonParseExample:54: error: invalid conversion from 'const char*' to 'size_t {aka unsigned int}' [-fpermissive] 
In file included from /Users/Wei0928/Documents/Arduino/libraries/ArduinoJson/src/../include/ArduinoJson/JsonArray.hpp:181:0, 
       from /Users/Wei0928/Documents/Arduino/libraries/ArduinoJson/src/../include/ArduinoJson.h:9, 
       from /Users/Wei0928/Documents/Arduino/libraries/ArduinoJson/src/ArduinoJson.h:14, 
       from JsonParseExample.ino:8: 
/Users/Wei0928/Documents/Arduino/libraries/ArduinoJson/src/../include/ArduinoJson/JsonArray.ipp:16:27: error: initializing argument 1 of 'ArduinoJson::JsonArraySubscript ArduinoJson::JsonArray::operator[](size_t)' [-fpermissive] 
inline JsonArraySubscript JsonArray::operator[](size_t index) { 
         ^
JsonParseExample:54: error: initializer fails to determine size of 'device' 
JsonParseExample:54: error: array must be initialized with a brace-enclosed initializer 
JsonParseExample:58: error: call of overloaded 'println(const char* [1])' is ambiguous 
JsonParseExample.ino:58:24: note: candidates are: 
In file included from /Users/Wei0928/Documents/Arduino/libraries/ArduinoJson/src/../include/ArduinoJson/Internals/../Internals/../Arduino/Print.hpp:87:0, 
       from /Users/Wei0928/Documents/Arduino/libraries/ArduinoJson/src/../include/ArduinoJson/Internals/../Internals/DummyPrint.hpp:10, 
       from /Users/Wei0928/Documents/Arduino/libraries/ArduinoJson/src/../include/ArduinoJson/Internals/../Internals/JsonPrintable.hpp:11, 
       from /Users/Wei0928/Documents/Arduino/libraries/ArduinoJson/src/../include/ArduinoJson/Internals/../JsonVariant.hpp:13, 
       from /Users/Wei0928/Documents/Arduino/libraries/ArduinoJson/src/../include/ArduinoJson/Internals/../JsonBuffer.hpp:15, 
       from /Users/Wei0928/Documents/Arduino/libraries/ArduinoJson/src/../include/ArduinoJson/Internals/BlockJsonBuffer.hpp:10, 
       from /Users/Wei0928/Documents/Arduino/libraries/ArduinoJson/src/../include/ArduinoJson/DynamicJsonBuffer.hpp:10, 
       from /Users/Wei0928/Documents/Arduino/libraries/ArduinoJson/src/../include/ArduinoJson.h:8, 
       from /Users/Wei0928/Documents/Arduino/libraries/ArduinoJson/src/ArduinoJson.h:14, 
       from JsonParseExample.ino:8: 
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Print.h:73:12: note: size_t Print::println(char) <near match> 
    size_t println(char); 
      ^
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Print.h:73:12: note: no known conversion for argument 1 from 'const char* [1]' to 'char' 
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Print.h:74:12: note: size_t Print::println(unsigned char, int) <near match> 
    size_t println(unsigned char, int = DEC); 
      ^
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Print.h:74:12: note: no known conversion for argument 1 from 'const char* [1]' to 'unsigned char' 
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Print.h:75:12: note: size_t Print::println(int, int) <near match> 
    size_t println(int, int = DEC); 
      ^
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Print.h:75:12: note: no known conversion for argument 1 from 'const char* [1]' to 'int' 
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Print.h:76:12: note: size_t Print::println(unsigned int, int) <near match> 
    size_t println(unsigned int, int = DEC); 
      ^
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Print.h:76:12: note: no known conversion for argument 1 from 'const char* [1]' to 'unsigned int' 
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Print.h:77:12: note: size_t Print::println(long int, int) <near match> 
    size_t println(long, int = DEC); 
      ^
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Print.h:77:12: note: no known conversion for argument 1 from 'const char* [1]' to 'long int' 
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Print.h:78:12: note: size_t Print::println(long unsigned int, int) <near match> 
    size_t println(unsigned long, int = DEC); 
      ^
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Print.h:78:12: note: no known conversion for argument 1 from 'const char* [1]' to 'long unsigned int' 
JsonParseExample:59: error: 'value' was not declared in this scope 
invalid conversion from 'const char*' to 'size_t {aka unsigned int}' [-fpermissive] 

頂,我還沒有想出如何單獨讀取陣列。 任何意見表示讚賞。

回答

0

這個問題似乎是在這裏:

const char* device[] = root["Device"]; 
      int value[] = root["Value"]; 

注意rootJsonArray一個JsonObject。因此,你不能以字符串作爲鍵訪問數組的元素。

試試這樣說:

JsonObject *firstDeviceObject = root[0]; 
const char* firstDeviceName = firstDeviceObject["Device"]; 
+0

謝謝您的建議。但是,在修改之後,顯示以下錯誤: 對於數組下標 無效類型的ArduinoJson :: JsonObject * [const char [7]]'此行代碼已標記。 'const char * firstDeviceName = firstDeviceObject [「Device」];' 我想我理解你的想法。首先從數組中獲取對象,然後從所述對象中獲取我需要的項目。我也試過了 –