Sari la conținut
ELFORUM - Forumul electronistilor

Extract un text specific dintr-un string


Mihai Popa

Postări Recomandate

Salut.

 

Am nevoie sa extrag cateva valori din urmatorul format de string: {"status":[{"now":1538310812995}],"bgs":[{"sgv":"198","trend":4,"direction":"Flat","datetime":1538310503745,"bgdelta":0,"battery":"65","iob":"0","cob":0}],"cals":[]}

Folosesc pentru asta un ESP8266 si un display lcd 2x16.

Acum, ma intereseaza urmatoarele informatii din acest string:

sgv=198 - aici, numarul 198 poate sa ia valori intre 30 si 400

direction=Flat - aici rezultatul poate avea si alte valori: Flat, DoubleUp, DoubleDown, ...

Practic, valoarea de dupa sgv si cea de dupa direction sunt variabile si de aceea nu pot folosi string.substring(pos1,pos2).

 

Orice ajutor, idee este binevenita.

 

Va multumesc.

 

Editat de Mihai Popa
Link spre comentariu

String-ul tau este de fapt o structura de date organizata ca un dictionar complex.

Pentru a iti face o idee "string-ul" tau arata mai clar asa:

 

{
    "status":[{"now":1538310812995}], 
    "bgs":[
    {
        "sgv":"198",
        "trend":4,
        "direction":"Flat",
        "datetime":1538310503745,
        "bgdelta":0,
        "battery":"65",
        "iob":"0",
        "cob":0
    }
          ],
    "cals":[]
}

Cum folosesti un ESP8266, poti instala MicroPython si problema ta se rezolva foarte usor asa:

 

data_struct =   {
    "status":[{"now":1538310812995}], 
    "bgs":  [
                {
                    "sgv":"198",
                    "trend":4,
                    "direction":"Flat",
                    "datetime":1538310503745,
                    "bgdelta":0,
                    "battery":"65",
                    "iob":"0",
                    "cob":0
                }
            ],
                    "cals":[]
}

for key in data_struct:
    if key == "bgs":
        for el in data_struct[key]:
            for key_in_bgs in el:
                if key_in_bgs == "sgv":
                    sgv_value = el[key_in_bgs]
                if key_in_bgs == "direction":
                    dir_value = el[key_in_bgs]


print("SGV_value is: %s ||| Direction is: %s" % (sgv_value, dir_value))

Rezultatul dupa rulare este:

$python main.py
SGV_value is: 198 ||| Direction is: Flat

 

Link spre comentariu

Salut,

 

"Acela este un string in format Json, exista librarii pt Arduino care pot procesa acel string si obtii un object Json si de acolo e foarte usor sa obtii oricare dintre variabile. 

https://github.com/bblanchon/ArduinoJson"..mie nu imi merge, sau nu stiu cum sa fac sa citest datele dintr-o matrice, sin acel sir json.

Am incercat exemplul de aici, dar nu seamana cu ce am eu nevoie: https://techtutorialsx.com/2016/08/06/esp8266-parse-json-arrays/

Am incercat si acest asistent: https://arduinojson.org/v5/assistant/, nu merge...

Puteti pune un exemplu despre cum pot citi datele dintr-o matrice, ca cea din sirul meu json?

Multumesc,

 

Mihai

Exemplu_1.ino

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări