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]
頂,我還沒有想出如何單獨讀取陣列。 任何意見表示讚賞。
謝謝您的建議。但是,在修改之後,顯示以下錯誤: 對於數組下標 無效類型的ArduinoJson :: JsonObject * [const char [7]]'此行代碼已標記。 'const char * firstDeviceName = firstDeviceObject [「Device」];' 我想我理解你的想法。首先從數組中獲取對象,然後從所述對象中獲取我需要的項目。我也試過了 –