Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Json jak nacpat uint8_t data
Jdi na stránku 1, 2  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Poradna
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Dumitru



Založen: Dec 11, 2015
Příspěvky: 183
Bydliště: Slovensko,Bratislava

PříspěvekZaslal: pá leden 12 2024, 10:25    Předmět: Json jak nacpat uint8_t data Citovat

Ahojte je možnosť uložiť pole typu
kód:
 uint8_t data[size]
do Json,

najprv som si myslel že to bude možne uložiť ako Json string
kód:
  {"S1":"uint8_t data[size]"}
a ďalej si dáta z databázy vytiahnem a budem pracovať s nimi ako s uint8_t

Problém je ak napríklad uint8_t hodnota sa bude rovnať jeden z príkladov medzere to mi potom db vyhodí ako error, niečo ako not valid json format


Je mi jasne že to budem môcť do db dostať ako iný formát

https://mariadb.com/kb/en/data-types/

Json je ale z hľadiska parsingu vhodný nakoľko to vie rovno DB a ja si len vypýtam dáta pre S1 a dostanem len ich z celého stringu takže ak by bola nejaká možnosť tie dáta tam narvať budem len rad

Napadlo mi jedno riešenie cele pole previesť ako hex to char

teda priklad:
kód:
data[0] = 0x12
bude reprezentovane ako char[4] kde

kód:

char[0] = '0';
char[1] = 'x';
char[2] = '1';
char[3] = '2';


cele to spáchať až po
kód:
data[size]


a následne to cele poslať ako Json string
kód:
{"S1":"0x12........"}


ale ak existuje niečo vhodnejšie budem rad každej informácie
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
pocitujlasku



Založen: Dec 12, 2005
Příspěvky: 2342
Bydliště: SR, Poprad

PříspěvekZaslal: pá leden 12 2024, 12:05    Předmět: Citovat

ako moze uint8_t obsahovat medzeru? ved to su cisla v rozsahu 0..255 nic ine.
array sa v json zapisuje ako
kód:

{
  "S1": [1,2,3,4]
}


Myslim, ze tu je problem uz v samotnom navrhu
a bacha, json v db je strasne pomaly, ak chces nieco v nom vyhladavat.

_________________
No vidis, a tak si sa bal
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Dumitru



Založen: Dec 11, 2015
Příspěvky: 183
Bydliště: Slovensko,Bratislava

PříspěvekZaslal: pá leden 12 2024, 12:38    Předmět: Citovat

môže, keď to mcu pošle cez http rovno surové dáta, tvoj zápis bude fungovať ak v mcu si prekonvertuje uint8 to char a potom to pošle v takom formáte ako si napisal ale hodnoty 1 2 3 4 budu reprezentovane ich asci hodnotou

Asi to neviem dobre vysvetliť Very Happy ale mame v mcu uložene v
kód:
uint8_t data[] = { 0x01,0x02,0x03,0x04};


vytvoríme

kód:
char json[] = { '"', 'S1' , '"', ':', '[', data[0] , ',' , data[1] , ',' , data[2]
 , ',' , data[3] , ']' };
'

následne toto cele ak pošlem cez HTTP tak to nebude fungovať

Odstraněna citace předcházejícího příspěvku, viz bod 4f "Pravidel". jimirek
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
pocitujlasku



Založen: Dec 12, 2005
Příspěvky: 2342
Bydliště: SR, Poprad

PříspěvekZaslal: pá leden 12 2024, 13:32    Předmět: Citovat

tak lebo to robis zle. bud tam posielas ciselne hodnoty [1,2,3] alebo mu tam posielas rovno ascii znaky, ale vtedy ich musis dat do uvodzoviek ['a', 'b', ' ']

ty mu tam pravdepodobne posielas ascii znaky, ale nie su v uvodzovkach, a preto to nejde.
Tipujem, je to arduino?

_________________
No vidis, a tak si sa bal
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Dumitru



Založen: Dec 11, 2015
Příspěvky: 183
Bydliště: Slovensko,Bratislava

PříspěvekZaslal: pá leden 12 2024, 14:06    Předmět: Citovat

pocitujlasku napsal(a):
ako moze uint8_t obsahovat medzeru? ved to su cisla v rozsahu 0..255 nic ine.
array sa v json zapisuje ako
kód:

{
  "S1": [1,2,3,4]
}


Myslim, ze tu je problem uz v samotnom navrhu
a bacha, json v db je strasne pomaly, ak chces nieco v nom vyhladavat.


oukej skúsim to popísať inač


kód:

{
  "S1": [A,2,3,4]
}


skús si uložiť toto do db Smile a uvidíš že to nepôjde Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
pocitujlasku



Založen: Dec 12, 2005
Příspěvky: 2342
Bydliště: SR, Poprad

PříspěvekZaslal: pá leden 12 2024, 14:36    Předmět: Citovat

jasne, ze to nepojde, lebo A nie je cislo. v poli musis mat rovnaky datovy typ.
a ked uz, tak by to malo byt 'A' - v uvodzovkach

_________________
No vidis, a tak si sa bal


Naposledy upravil pocitujlasku dne pá leden 12 2024, 14:41, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Valdano



Založen: Jan 01, 2023
Příspěvky: 1999
Bydliště: Česká Lípa

PříspěvekZaslal: pá leden 12 2024, 14:38    Předmět: Citovat

Co to má vůbec být?

Za mě to vůbec nedává smysl a je to zřejmě naprosto vytržené z kontextu a od základu i špatně navržené.

Posílat v textovém protokolu HTML textové znaky odpovídající hodnotám nad 32 dekadicky v kombinaci a binárními hodnotami pod 32 dekadicky viz ty hodnoty 0x010x04, což děláte, je dle mého názoru nesmyslné a tudíž vám to pak logicky nefunguje správně, a to nemluvě o tom, že pokud se s tím obsahem v poli json[] má zacházet jako s textovým řetězcem tak vám na konci chybí zakončení 0, ale i tak se mi to zdá od základu špatně navržené.

kód:
uint8_t data[] = { 0x01,0x02,0x03,0x04};
char json[] = { 34, 'S', '1' , 34, ':', '[', data[0] , ',' , data[1] , ',' , data[2] , ',' , data[3] , ']', 0 };


A tohle je obsah json[]:

"S1":[☺,☻,♥,♦]

tedy v podstatě nesmyslná kombinace zobrazitelných (nad 32 dekadicky) a nezobrazitelných (pod 32 dekadicky) znaků char, které jsou intepretovány takto, ale na straně nějaké DB kde se to snažíte zapisovat do položky nějakého typu to může být logicky odmítnuto jako nepovolená hodnota.

Mimochodem je jedno jestli na konkrétní pozici pole napíšete v jazyce C hodnotu dekadicky jako číslo nebo hexa nebo znakově, protože v jazyce C, ve kterém s tím defacto pracujete je to významově totéž a výsledek je ten obsah pole json[]. Podstatné je, že každá pozice pole je v reálu jen jeden char.

Dekadicky např. 34 je totéž co hexa 0x22 a totéž co jeden char zapsaný v jednoduchých uvozovkách '"'.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Dumitru



Založen: Dec 11, 2015
Příspěvky: 183
Bydliště: Slovensko,Bratislava

PříspěvekZaslal: pá leden 12 2024, 15:10    Předmět: Citovat

Áno konečne niekto mi rozumie Very Happy
Všetko čo ste popísali je úplne správne , lenže mne to zobrazovať ako ascii netreba ja viem že to čo tam pošlem je z hľadiska ascii úplná blbosť a viem že ďalej z dátami z db ktoré spracujem nejakou mnou apkou musím pracovať ako s dekadickými hexa binarnymi ... hodnotami.

Totižto ja chcem do JSON dostať pole ktoré bude obsahovať akekolvek hodnoty od 0...255. Tak aby ma db neblokovala že používam nepovolene znaky. Pretože db sa na nich pozerá ako na ascii znaky

pocitujlasku napsal(a):
jasne, že to nepôjde, lebo A nie je číslo. v poli musis mat rovnaký dátový typ.
a keď už, tak by to malo byt 'A' - v úvodzovkách


Pre teba je to A nie je číslo ale pre mňa je to dekadické číslo 65 Smile a jasne že tam musíš dať úvodzovky ale stále to bude len 65 Very Happy

Odstraněna citace předcházejícího příspěvku, viz bod 4f "Pravidel". jimirek
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Valdano



Založen: Jan 01, 2023
Příspěvky: 1999
Bydliště: Česká Lípa

PříspěvekZaslal: pá leden 12 2024, 15:25    Předmět: Citovat

Problémem je ovšem právě v tom přenosu binárních dat přes textový HTML protokol. Předpokládám, že ten HTML poskytuje nějaká serverová aplikace, kterou si jste sám napsal.

Je otázkou co přesně znak po znaku přijme druhá strana a jak to ta druhá strana v reálu vidí či jak to interpretuje, a to ještě před tím než to bude předávat do jakéhokoli DB?

Problém je totiž možná v tom, že při přenosu vhodně nezakódovaných binárních dat přes textový protokol HMTL dojde k jejich zkomolení a druhá strana pak obdrží bůhví co. Při posílání binárních dat přes HTML je vhodnější použít textové kódování BASE64 podobně jako třeba v emailech.

Takže je na zvážení možnost ty binární data na straně serverové aplikace nejprve převést do jednoto textového řetězce BASE64 což je čistě textové kódování používající jen zobrazitelné znaky omezené jen na část ASCII sady a protistraně je pak předat přes HTML jako BASE64 řetězec neobsahující žádná binární data. Protistrana si pak přijatý řetězec BASE64 převede zpět na původní binární data aniž by došlo k jejich zkomolení.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pocitujlasku



Založen: Dec 12, 2005
Příspěvky: 2342
Bydliště: SR, Poprad

PříspěvekZaslal: pá leden 12 2024, 15:31    Předmět: Citovat

ani pre db to nie je cislo. Pozor na to, ze dnes sa uz pracuje s UTF-8 a nie ascii. preto ti stale opakujem, posielaj tam cisla, a nemiesaj ascii znaky a ich ord hodnotu.
pre teba stale moze byt A=65, ale parser, ako vidis s tym ma problem.
Ak to robis v arduine, existuje super kniznica arduinojson, kde si vies krasne serializovat a deserializovat json a vyhnes sa takymto zvlastnym rieseniam

_________________
No vidis, a tak si sa bal
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Valdano



Založen: Jan 01, 2023
Příspěvky: 1999
Bydliště: Česká Lípa

PříspěvekZaslal: pá leden 12 2024, 15:36    Předmět: Citovat

Ano nebastlit to takto nevhodně po svém, ale použít knihovnu ArduinoJson je dobré řešení.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Dumitru



Založen: Dec 11, 2015
Příspěvky: 183
Bydliště: Slovensko,Bratislava

PříspěvekZaslal: pá leden 12 2024, 15:52    Předmět: Citovat

pocitujlasku napsal(a):
ani pre db to nie je cislo. Pozor na to, ze dnes sa uz pracuje s UTF-8 a nie ascii. preto ti stale opakujem, posielaj tam cisla, a nemiesaj ascii znaky a ich ord hodnotu.
pre teba stale moze byt A=65, ale parser, ako vidis s tym ma problem.
Ak to robis v arduine, existuje super kniznica arduinojson, kde si vies krasne serializovat a deserializovat json a vyhnes sa takymto zvlastnym rieseniam


Valdano napsal(a):
Ano nebastlit to takto nevhodně po svém, ale použít knihovnu ArduinoJson je dobré řešení.



Super ďakujem vám za objasnenie a s arduino nepracujem ale pozriem sa do kodu ako je to tam implementovane .

každopádne už teraz predpokladám že v tej knižnice sa budú číselne hodnoty uint interpretovane na ich ascii hodnotu ako napríklad 0x01 -> '1' 0xff -> "255" aby HTML s tým nemal potiže Smile a následne sa to cele ešte zapuzdri do formátu JSON .

Ja som dneska narýchlo spravil podobne riešenie len interpretujem hex hodnotu do ascii a nasledne to zašlem


kód:


void hex_to_str ( const uint8_t* input_data, char* output_string, const uint16_t length )
{


  for (uint16_t i = 0; i < length; i++)
  {
    *(output_string++) = '0';
    *(output_string++) = 'x';
    output_string +=  sprintf(output_string,"%.2x", *(input_data++)); // save data and increment pointer value
  }

}

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Valdano



Založen: Jan 01, 2023
Příspěvky: 1999
Bydliště: Česká Lípa

PříspěvekZaslal: pá leden 12 2024, 15:59    Předmět: Citovat

Převést binární data na straně serveru na čistě textový řetězec složený z hexa vyjádření jednotlivých hodnot v poli je také určitý způsob řešení. Pokud stačí do DB ukládat jen takto složené řetězce pak na straně protistrany ani nebude nutné převádět data do jiného formátu a do DB se uloží jen jako čisté řetězce obsahující textové hexa vyjádření tj. tak jak jsou převedeny.

Zdrojáky knihovny ArduinoJson jsou na GitHubu, ale nečekal bych nic jednoduchého. Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
samec



Založen: Dec 19, 2017
Příspěvky: 4589

PříspěvekZaslal: pá leden 12 2024, 17:34    Předmět: Citovat

To je jak že neovládam malú násobilku, ale idem počítať trojný integrál. Ignorant
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Dumitru



Založen: Dec 11, 2015
Příspěvky: 183
Bydliště: Slovensko,Bratislava

PříspěvekZaslal: pá leden 12 2024, 19:18    Předmět: Citovat

Valdano napsal(a):
Převést binární data na straně serveru na čistě textový řetězec složený z hexa vyjádření jednotlivých hodnot v poli je také určitý způsob řešení. Pokud stačí do DB ukládat jen takto složené řetězce pak na straně protistrany ani nebude nutné převádět data do jiného formátu a do DB se uloží jen jako čisté řetězce obsahující textové hexa vyjádření tj. tak jak jsou převedeny.

Zdrojáky knihovny ArduinoJson jsou na GitHubu, ale nečekal bych nic jednoduchého. Wink


Wink jj našiel som si to ale ďakujem.
Inak len na okraj dáta tam chodili správne (to netvrdím že to tak robiť je správne) problém bol že ich tam db nechcela pustiť. Diky za pomoc


samec napsal(a):
To je jak že neovládam malú násobilku, ale idem počítať trojný integrál. Ignorant


Doučím sa Smile nasobilku
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Poradna Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.23 sekund