Buonasera, nel mio progetto ho configurato diverse variabili (gruppi di 5 variabili) per fare diverse richieste tramite API.
L'utente sceglie un "profilo" a cui corrispondono diverse estrapolazioni di testo dalla stringa JSON che mi restituisce il server API che interrogo.
if (PoolsPos[posPools] == "Zerg"){
balanceVar = Zerg_balance;
}
estrazione del valore "balance" con il testo esplicito
float balance = docPool["balance"];
estrazione del valore "balance" con la variabile
float balance = docPool[balanceVar];
Ho settato le mie variabili in maniera differente perchè interrogano due server diversi. Nel profilo in esempio è
const char* Zerg_balance = "\"balance\"";
però non funziona.
Seppure in Serial monitor mi dica che
Serial.println(balanceVar);
risulta correttamente "balance" l'estrazione non funziona.
Non lo hai specificato, ma presumo tu stia utilizzando la libreria ArduinoJson.
Se vuoi che le persone abbiano più elementi per poterti aiutare, sarebbe bene mettere lo sketch completo o ancora meglio uno sketch funzionante che isola il tuo problema specifico. Anche un esempio del JSON di cui devi fare il parsing sarebbe utile.
Ad ogni modo, se non ho capito male quello che intendi, il tuo problema è che hai lasciato le virgolette nella variabile che rappresenta la tua chiave, virgolette che non sono necessarie con la libreria in questione.
Inoltre, da quanto ho visto, le API che stai usando restituiscono spesso un array a parte quella per i portafogli (che immagino sia quella che produce il risultato che devi elaborare).
Non ho un WALLET_ADDRESS valido per estrapolare dei dati significativi, ho fatto un esempio con la API che restituisce gli ultimi miners, ma gestione degli array a parte (che magari ti torna utile) il discorso non cambia.
Grazie per la risposta , si la libreria è ArduinoJSON
Non posso mettere il programma perchè ha 1420 righe.
Hai però centrato l'argomento. Faccio delle interrogazioni tramite API ad un sito che è pool per il mining.
Durante il deserialize la riga che ho riportato float balance = docPool["balance"];
funziona e mi ritorna la quantità di monete minate.
Siccome le diverse pool richiedono di costruire la richiesta API in maniera differente e rispondono con un JSON strutturato in maniera differente ovviamente ho pensato di far selezionare all'utente la pool che desidera e salvare in un pools.h incluso la costruzione della richiesta API che poi invio come http.begin(poolAddress + poolPath + "indirizzo_wallet");
Stanotte ho anche cercato ulteriori informazioni e forse potrei scegliere la strada di usare struct ?
Ora leggo per bene la tua risposta e faccio delle prove.
Grazie