[RISOLTO] deserializeJson: errore nel riutilizzo della stringa origine

Sicuramente mi son perso qualche parte della documentazione ma non capisco perché quando cerco di creare un secondo oggetto a partire dalla stessa variabile da errore di InvalidInput.
La variabile passata con la struttua json non dovrebbe essere utilizzata solo per "alimentare" l'oggetto?

Se vi chiedete perché creo due oggetti dalla stessa struttura uno statico e uno dinamico, è perché il primo mi serve solo per mappare gli ingressi mentre sul secondo devo memorizzare un dato che varia sempre legato al medesimo ingresso.

#include <ArduinoJson.h> 
char mymap[] = "{"
  "\"I_01\": 1,"
  "\"I_02\": 3,"
  "\"I_03\": 4,"
  "\"I_04\": 5,"
  "\"I_05\": 6,"
  "\"I_06\": 7,"
  "\"I_07\": 8,"
  "\"I_08\": 9,"
  "\"I_09\": 10,"
  "\"I_00\": 11"
    "}";
    
StaticJsonDocument<256> static_doc;
DynamicJsonDocument dynamic_doc(256);
DeserializationError error;

void setup() {
  Serial.begin(9600);

  error = deserializeJson(static_doc, mymap);
  if (error) {
    Serial.print(F("deserializeJson 1 failed: "));
    Serial.println(error.f_str());
    return;
  }
  
  error = deserializeJson(dynamic_doc, mymap);
  if (error) {
    Serial.print(F("deserializeJson 2 failed: "));
    Serial.println(error.f_str());
    return;
  }
}

void loop() {
}

Perché la prima de-serializzazione per eseguire il parsing della stringa modifica mymap[] aggiungendo il terminatore di stringhe e quindi al secondo giro i conti non tornano e ti da l'errore.
Se aggiungi un const davanti a char, la libreria farà una copia temporanea di mymap[] e quindi funzionerà tutte e due le volte come ti aspetti.

const char mymap[] = {....};

Comunque tieni in considerazione che come indicato dall'autore stesso della libreria, gli oggetti JsonDocument static o dynamic che siano non andrebbero usati per memorizzare dei valori ma solo per il motivo per cui sono nati ovvero serializzare e deserializzare una stringa JSON.

Se devi memorizzare quell'elenco di valori usa una struct.

Un estratto del manuale della libreria in questione...
E' solo mezza pagina, non dovrebbe violare i diritti di autore, anzi invito ad acquistarlo anche solo come "sostegno" per l'ottima libreria.
nel caso rimuovo subito.

@cotestatnt
Grazie per il chiarimento e il suggerimento.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.