Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

JSON Parser
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=16583
Страница 1 от 3

Автор:  relsys [ Пон Юни 10, 2019 10:50 am ]
Заглавие:  JSON Parser

Дайте някой читав json parser за ембедед приложение....

Автор:  Nikola Kirov [ Пон Юни 10, 2019 11:00 am ]
Заглавие:  Re: JSON Parser

Преди време разглеждах доста варианти и никой не ми хареса много от това което намерих.
След това 10тина дни се борих да си сътворя нещо мое платформено независимо.

https://github.com/rafagafe/tiny-json от този взаимствах някои идеи.
това ползвах като идея за енкодер https://github.com/Austinpayne/emjson

Автор:  gicho [ Пон Юни 10, 2019 2:06 pm ]
Заглавие:  Re: JSON Parser

https://github.com/DaveGamble/cJSON
или
https://github.com/zserge/jsmn

Автор:  nikolovs [ Пон Юни 10, 2019 3:55 pm ]
Заглавие:  Re: JSON Parser

идеята е да парсва и вложени json структури , понеже там е проблема

Автор:  gicho [ Пон Юни 10, 2019 9:11 pm ]
Заглавие:  Re: JSON Parser

Позабравил съм кой как работеше, но си е компромис между скорост и консумация на памет. Отделно подходи като DOM vs SAX-подобни API-та водят до разлика в интегрирането с останалия код. Така че ако трябва да се търси конкретен вариант е добре да дефинираме кой от двата достъпа търсиш, какви ресурси си готов да отделиш.
Ако има избор предпочитам да обърна json-а (или xml) към нещо по-ефективно - messagepack например. Много рядко някой му се налага да прави JSON на ръка примерно и да го зарежда директно на ембедед - имам предвид че или редактора е нещо умно и може да се конвертира там, или има някой (сървър?) по средата който може да прави конверсията. Един от случаите за които се сещам е човек с текстов редактор пишеше на SD карта текстов файл и тази карта се мушкаше директно в ембедед устройството.

Автор:  nikolovs [ Вто Юни 11, 2019 12:27 am ]
Заглавие:  Re: JSON Parser

Понякога се налага да се парсне този примерен json :

{ k1: " val1",
k2: " val2",
k3:{
k4: "val4",
k5: "val5"
}
}

В дадени ситуации даже k4 и к5 са с променливи имена, респективно и тяхните стойности. 8O

Автор:  DanielDimov [ Вто Юни 11, 2019 10:10 am ]
Заглавие:  Re: JSON Parser

nikolovs написа:
{ k1: " val1",
k2: " val2",
k3:{
k4: "val4",
k5: "val5"
}
}


Това е JSON5 ( https://json5.org/ )

В класическия JSON имената на полетата също трябва да са в кавички.

Автор:  relsys [ Вто Юни 11, 2019 7:35 pm ]
Заглавие:  Re: JSON Parser

DanielDimov написа:
nikolovs написа:
{ k1: " val1",
k2: " val2",
k3:{
k4: "val4",
k5: "val5"
}
}


Това е JSON5 ( https://json5.org/ )

В класическия JSON имената на полетата също трябва да са в кавички.


Не е 5, в кавички са:

Код:
{ "k1" : " val1",
"k2" : " val2",
"k3" :{
"k4" : "val4",
"k5" : "val5"
}
}

Автор:  miro_atc [ Сря Юни 12, 2019 9:03 am ]
Заглавие:  Re: JSON Parser

relsys написа:
Дайте някой читав json parser за ембедед приложение....


Дефинирай "читав" и дефинирай "ембедед" ;-)

Парсерите по принцип могат да правят две неща - да валидират входните данни дали отговарят на определени правила и/или да конвертират данните до друг, по-удобен формат. От голямо значение е средата в която работиш, дали имаш динамична памет, дали имаш абстракция за стрингове, за обекти и т.н. Тия неща варират много (ако изобщо ги има налични), съответно не всеки парсер би ти свършил работа.
Всъщност, ако имаш добър инструментариум самият парсер не е чак толкова сложен. Може и сам да си го напишеш или модифицираш някой готов. Ако гледаш готови, преценявай следните неща - първо как работи с паметта. Стандартно се ползва рекурсия, което за ембедед не е добра идея. Нямаш неограничен стек, а и не искаш да се омазва като парсваш малко по-шибани данни. Парсерът трябва да е нерекурсивен и да работи с динамична памет и като му свърши паметта да си излиза културно с грешка, а не да забива. А другият проблем като почнеш да работиш със структурирани данни е, че с времето се налага да работиш с все повече данни и колкото и да ти е била динамичната памет тя рано или късно се оказва недостатъчна. Затова по-добрите парсери вместо с указатели към данните работят с неща като стриймове или файлове. Това малко се отразява на парсването, тъй като не всички данни са ти налични, има значение как ги достъпваш и т.н.

Автор:  relsys [ Сря Юни 12, 2019 11:19 am ]
Заглавие:  Re: JSON Parser

Миро, за Cortex M3 иде реч.

Поради някаква причина, ползвам frozen.c/h. За създаване - няма грижи. При парсване обаче, има някакъв бъг в библиотеката и не парсва правилно - или въобще не парсва вложените json структури. Проблема е, че нямаше време да го напиша или да изследвам проблемите. Иначе, такава глупост като json, парсера дето съм го писал за датекския протокол с малко модификации ще го сдъвче и изплюе за норматив... Просто ми се искаше да сложа нещо готово и то да изплюе няколко прости стринга, пък аз да си продължа със задачата нататък... ама явно няма да е точно тъй...

Автор:  miro_atc [ Чет Юни 13, 2019 11:04 am ]
Заглавие:  Re: JSON Parser

relsys написа:
ползвам frozen.c/h


най-после му хвърлих едно око...
Изглежда прилично написан, не е моя стил, но е добър. С други думи нивото на руснака е добро и е малко вероятно кода да има груби или елементарни бъгове. Разбира се бъгове винаги може да има, но по-скоро като гледам това не е толкова парсер. Нямаш втори формат, по-скоро имаш инструменти как да генерираш и как да обхождаш и обработваш json.
Така че много ще зависи как точно използваш инструментите. Примерно като обхождаш ми изглежда че обхождаш на дадено ниво. Ако искаш да слезеш надолу по разклоненият според мен ще трябва промениш параметрите на функцията за итерация.

Автор:  relsys [ Пет Юни 14, 2019 12:53 am ]
Заглавие:  Re: JSON Parser

miro_atc написа:
relsys написа:
ползвам frozen.c/h


най-после му хвърлих едно око...
Изглежда прилично написан, не е моя стил, но е добър. С други думи нивото на руснака е добро и е малко вероятно кода да има груби или елементарни бъгове. Разбира се бъгове винаги може да има, но по-скоро като гледам това не е толкова парсер. Нямаш втори формат, по-скоро имаш инструменти как да генерираш и как да обхождаш и обработваш json.
Така че много ще зависи как точно използваш инструментите. Примерно като обхождаш ми изглежда че обхождаш на дадено ниво. Ако искаш да слезеш надолу по разклоненият според мен ще трябва промениш параметрите на функцията за итерация.


Приличен е да, но си има неговите подводни камъни. Не парсва примерно, ако в стринга има '.' (точка). Как и да е, с помощта на двама колеги (nikolovs и Мартин Пенев) работата стана. Има малко разлики и при ползване под windows, и при gcc.
Ако някой има нужда от някаква помощ с тая библиотека - да свирка.

Автор:  speedblue [ Сря Юни 19, 2019 2:18 am ]
Заглавие:  Re: JSON Parser

jsmn - това е тествано и работи до ден днешен, 5-6 години вече. Много компактно решение без да използва функции за динамично заделяне на памет.

Автор:  miro_atc [ Сря Юни 19, 2019 10:12 am ]
Заглавие:  Re: JSON Parser

speedblue написа:
без да използва функции за динамично заделяне на памет.


Това е по-лошият вариант, защото когато не се ползва динамична памет се ползва рекурсия... Съответно правиш устройство с парсер, аз му подавам един готин файл и устройството казва бум! :D

Автор:  speedblue [ Пон Юни 24, 2019 1:19 am ]
Заглавие:  Re: JSON Parser

miro_atc написа:
speedblue написа:
без да използва функции за динамично заделяне на памет.

Това е по-лошият вариант, защото когато не се ползва динамична памет се ползва рекурсия... Съответно правиш устройство с парсер, аз му подавам един готин файл и устройството казва бум! :D

Няма как да каже БУМ, понеже си има лимит на токъните и ги реже :axe: отделно алгоритъма за откриване на грешки също не позволява БУМ [-X
Това работи наистина много много стабилно, даже няма случай да се е издънило, а външни клиенти докато се научат да подават правилни JSON-и бая са се чесали защо им връща грешка. Накрая се научават разбира се =D>

Този парсер си има своите предимства и ограничения, но не можеш да го забиеш, поне не съм виждал такъв случай.

Страница 1 от 3 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/