に基づいてJSONオブジェクトを入力:私はフォーマット「/ index1の/ INDEX2/index3の文字列に応じて、オブジェクトを入力しますは、再帰的に、私は次のようなJSONオブジェクト持っている文字列
{
"ESP_IN_PC_OUT":{
"track":{
"1":{
"mute":{
"type":"LED",
"pins":[4]
}
},
"2":{
"mute":{
"type":"LED",
"pins":[5]
}
}
}
}
}
を... "(文字列はOSCメッセージのアドレスです)。例えば、このような「/トラック/ 2 /ミュート」を返すべきであるJSONオブジェクト:
{
"type":"LED",
"pins":[5]
}
だからタイプ、ピン・アレイ、及び後で実施されるいくつかの他の値にアクセスすることができます。
私はArduino JSON libraryをESP8266で使用しています。これは私が試したコードです:
JSON_OSC_settings2:26: error: use of deleted function 'ArduinoJson::JsonObject& ArduinoJson::JsonObject::operator=(const ArduinoJson::JsonObject&)'
tmpJson = tmpJson[tmp];
^
In file included from C:\Users\Pieter\Documents\Arduino\libraries\ArduinoJson-master/include/ArduinoJson.hpp:12:0,
from C:\Users\Pieter\Documents\Arduino\libraries\ArduinoJson-master/include/ArduinoJson.h:8,
from C:\Users\Pieter\Documents\Arduino\libraries\ArduinoJson-master/ArduinoJson.h:8,
from C:\Users\Pieter\Documents\Arduino\JSON_OSC_settings2\JSON_OSC_settings2.ino:1:
C:\Users\Pieter\Documents\Arduino\libraries\ArduinoJson-master/include/ArduinoJson/JsonObject.hpp:38:7: note: 'ArduinoJson::JsonObject& ArduinoJson::JsonObject::operator=(const ArduinoJson::JsonObject&)' is implicitly deleted because the default definition would be ill-formed:
class JsonObject : public Internals::JsonPrintable<JsonObject>,
^
In file included from C:\Users\Pieter\Documents\Arduino\libraries\ArduinoJson-master/include/ArduinoJson/JsonArray.hpp:13:0,
from C:\Users\Pieter\Documents\Arduino\libraries\ArduinoJson-master/include/ArduinoJson.hpp:11,
from C:\Users\Pieter\Documents\Arduino\libraries\ArduinoJson-master/include/ArduinoJson.h:8,
from C:\Users\Pieter\Documents\Arduino\libraries\ArduinoJson-master/ArduinoJson.h:8,
from C:\Users\Pieter\Documents\Arduino\JSON_OSC_settings2\JSON_OSC_settings2.ino:1:
C:\Users\Pieter\Documents\Arduino\libraries\ArduinoJson-master/include/ArduinoJson/Internals/ReferenceType.hpp:32:18: error: 'ArduinoJson::Internals::ReferenceType& ArduinoJson::Internals::ReferenceType::operator=(const ArduinoJson::Internals::ReferenceType&)' is private
ReferenceType& operator=(const ReferenceType&);
^
In file included from C:\Users\Pieter\Documents\Arduino\libraries\ArduinoJson-master/include/ArduinoJson.hpp:12:0,
from C:\Users\Pieter\Documents\Arduino\libraries\ArduinoJson-master/include/ArduinoJson.h:8,
from C:\Users\Pieter\Documents\Arduino\libraries\ArduinoJson-master/ArduinoJson.h:8,
from C:\Users\Pieter\Documents\Arduino\JSON_OSC_settings2\JSON_OSC_settings2.ino:1:
C:\Users\Pieter\Documents\Arduino\libraries\ArduinoJson-master/include/ArduinoJson/JsonObject.hpp:38:7: error: within this context
class JsonObject : public Internals::JsonPrintable<JsonObject>,
^
exit status 1
use of deleted function 'ArduinoJson::JsonObject& ArduinoJson::JsonObject::operator=(const ArduinoJson::JsonObject&)'
どのように私はこの問題を解決することができます。
#include <ArduinoJson.h>
char *jsonstr = "{\n \"ESP_IN_PC_OUT\":{\n \"track\":{\n \"1\":{\n \"mute\":{\n \"type\":\"LED\",\n \"pins\":[4]\n }\n },\n \"2\":{\n \"mute\":{\n \"type\":\"LED\",\n \"pins\":[5]\n }\n }\n }\n },\n\n\n \"ESP_OUT_PC_IN\":{\n \"analog\":{\n },\n \"digital\":{\n \"16\":\"/track/1/mute\"\n }\n }\n}";
void setup() {
Serial.begin(115200);
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(jsonstr);
if (!root.success()) {
Serial.println("parseObject() failed");
return;
}
Serial.println((const char*) root["ESP_IN_PC_OUT"]["track"]["2"]["mute"]["type"]); // prints "LED"
Serial.println();
char *address = "/track/2/mute"; // _____Interesting part_____
char *tmp = strtok(address,"/");
JsonObject& tmpJson = root["ESP_IN_PC_OUT"];
bool success = true;
while(tmp != NULL && success == true){
Serial.println(tmp);
if(tmpJson.containsKey(tmp)){
tmpJson = tmpJson[tmp]; // Error: use of deleted function 'ArduinoJson::JsonObject& ArduinoJson::JsonObject::operator=(const ArduinoJson::JsonObject&)'
tmp = strtok(NULL,"/");
} else {
success = false;
}
}
if(success == true){
Serial.println((const char*)tmpJson["type"]);
} else {
Serial.println("Address not found");
}
}
void loop() {
}
しかし、これは私に次のエラーメッセージが表示されますか?どのようなアプローチをとることができますか?
なぜリファレンスを再定義しようとしていますか? – Sugar