Автор |
Съобщение |
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 10:41 am Мнения: 1657
|
JSON Parser
Дайте някой читав json parser за ембедед приложение....
|
Пон Юни 10, 2019 9:50 am |
|
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 8:19 pm Мнения: 4410 Местоположение: Stara Zagora
|
Re: JSON Parser
Преди време разглеждах доста варианти и никой не ми хареса много от това което намерих. След това 10тина дни се борих да си сътворя нещо мое платформено независимо. https://github.com/rafagafe/tiny-json от този взаимствах някои идеи. това ползвах като идея за енкодер https://github.com/Austinpayne/emjson
|
Пон Юни 10, 2019 10:00 am |
|
|
gicho
Ранг: Форумен бог
Регистриран на: Пон Мар 13, 2006 12:59 pm Мнения: 3855 Местоположение: Габрово
|
Re: JSON Parser
|
Пон Юни 10, 2019 1:06 pm |
|
|
nikolovs
Ранг: Ориентиран
Регистриран на: Съб Май 17, 2008 10:01 pm Мнения: 238
|
Re: JSON Parser
идеята е да парсва и вложени json структури , понеже там е проблема
|
Пон Юни 10, 2019 2:55 pm |
|
|
gicho
Ранг: Форумен бог
Регистриран на: Пон Мар 13, 2006 12:59 pm Мнения: 3855 Местоположение: Габрово
|
Re: JSON Parser
Позабравил съм кой как работеше, но си е компромис между скорост и консумация на памет. Отделно подходи като DOM vs SAX-подобни API-та водят до разлика в интегрирането с останалия код. Така че ако трябва да се търси конкретен вариант е добре да дефинираме кой от двата достъпа търсиш, какви ресурси си готов да отделиш. Ако има избор предпочитам да обърна json-а (или xml) към нещо по-ефективно - messagepack например. Много рядко някой му се налага да прави JSON на ръка примерно и да го зарежда директно на ембедед - имам предвид че или редактора е нещо умно и може да се конвертира там, или има някой (сървър?) по средата който може да прави конверсията. Един от случаите за които се сещам е човек с текстов редактор пишеше на SD карта текстов файл и тази карта се мушкаше директно в ембедед устройството.
|
Пон Юни 10, 2019 8:11 pm |
|
|
nikolovs
Ранг: Ориентиран
Регистриран на: Съб Май 17, 2008 10:01 pm Мнения: 238
|
Re: JSON Parser
Понякога се налага да се парсне този примерен json : { k1: " val1", k2: " val2", k3:{ k4: "val4", k5: "val5" } } В дадени ситуации даже k4 и к5 са с променливи имена, респективно и тяхните стойности.
|
Пон Юни 10, 2019 11:27 pm |
|
|
DanielDimov
Ранг: Почетен член
Регистриран на: Нед Фев 16, 2014 2:36 pm Мнения: 953
|
Re: JSON Parser
Това е JSON5 ( https://json5.org/ ) В класическия JSON имената на полетата също трябва да са в кавички.
|
Вто Юни 11, 2019 9:10 am |
|
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 10:41 am Мнения: 1657
|
Re: JSON Parser
|
Вто Юни 11, 2019 6:35 pm |
|
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 5:52 pm Мнения: 10356 Местоположение: Добрич
|
Re: JSON Parser
Дефинирай "читав" и дефинирай "ембедед" Парсерите по принцип могат да правят две неща - да валидират входните данни дали отговарят на определени правила и/или да конвертират данните до друг, по-удобен формат. От голямо значение е средата в която работиш, дали имаш динамична памет, дали имаш абстракция за стрингове, за обекти и т.н. Тия неща варират много (ако изобщо ги има налични), съответно не всеки парсер би ти свършил работа. Всъщност, ако имаш добър инструментариум самият парсер не е чак толкова сложен. Може и сам да си го напишеш или модифицираш някой готов. Ако гледаш готови, преценявай следните неща - първо как работи с паметта. Стандартно се ползва рекурсия, което за ембедед не е добра идея. Нямаш неограничен стек, а и не искаш да се омазва като парсваш малко по-шибани данни. Парсерът трябва да е нерекурсивен и да работи с динамична памет и като му свърши паметта да си излиза културно с грешка, а не да забива. А другият проблем като почнеш да работиш със структурирани данни е, че с времето се налага да работиш с все повече данни и колкото и да ти е била динамичната памет тя рано или късно се оказва недостатъчна. Затова по-добрите парсери вместо с указатели към данните работят с неща като стриймове или файлове. Това малко се отразява на парсването, тъй като не всички данни са ти налични, има значение как ги достъпваш и т.н.
|
Сря Юни 12, 2019 8:03 am |
|
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 10:41 am Мнения: 1657
|
Re: JSON Parser
Миро, за Cortex M3 иде реч.
Поради някаква причина, ползвам frozen.c/h. За създаване - няма грижи. При парсване обаче, има някакъв бъг в библиотеката и не парсва правилно - или въобще не парсва вложените json структури. Проблема е, че нямаше време да го напиша или да изследвам проблемите. Иначе, такава глупост като json, парсера дето съм го писал за датекския протокол с малко модификации ще го сдъвче и изплюе за норматив... Просто ми се искаше да сложа нещо готово и то да изплюе няколко прости стринга, пък аз да си продължа със задачата нататък... ама явно няма да е точно тъй...
|
Сря Юни 12, 2019 10:19 am |
|
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 5:52 pm Мнения: 10356 Местоположение: Добрич
|
Re: JSON Parser
най-после му хвърлих едно око... Изглежда прилично написан, не е моя стил, но е добър. С други думи нивото на руснака е добро и е малко вероятно кода да има груби или елементарни бъгове. Разбира се бъгове винаги може да има, но по-скоро като гледам това не е толкова парсер. Нямаш втори формат, по-скоро имаш инструменти как да генерираш и как да обхождаш и обработваш json. Така че много ще зависи как точно използваш инструментите. Примерно като обхождаш ми изглежда че обхождаш на дадено ниво. Ако искаш да слезеш надолу по разклоненият според мен ще трябва промениш параметрите на функцията за итерация.
|
Чет Юни 13, 2019 10:04 am |
|
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 10:41 am Мнения: 1657
|
Re: JSON Parser
Приличен е да, но си има неговите подводни камъни. Не парсва примерно, ако в стринга има '.' (точка). Как и да е, с помощта на двама колеги (nikolovs и Мартин Пенев) работата стана. Има малко разлики и при ползване под windows, и при gcc. Ако някой има нужда от някаква помощ с тая библиотека - да свирка.
|
Чет Юни 13, 2019 11:53 pm |
|
|
speedblue
Ранг: Ориентиран
Регистриран на: Нед Фев 25, 2007 12:41 am Мнения: 276 Местоположение: София
|
Re: JSON Parser
jsmn - това е тествано и работи до ден днешен, 5-6 години вече. Много компактно решение без да използва функции за динамично заделяне на памет.
|
Сря Юни 19, 2019 1:18 am |
|
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 5:52 pm Мнения: 10356 Местоположение: Добрич
|
Re: JSON Parser
Това е по-лошият вариант, защото когато не се ползва динамична памет се ползва рекурсия... Съответно правиш устройство с парсер, аз му подавам един готин файл и устройството казва бум!
|
Сря Юни 19, 2019 9:12 am |
|
|
speedblue
Ранг: Ориентиран
Регистриран на: Нед Фев 25, 2007 12:41 am Мнения: 276 Местоположение: София
|
Re: JSON Parser
Няма как да каже БУМ, понеже си има лимит на токъните и ги реже отделно алгоритъма за откриване на грешки също не позволява БУМ Това работи наистина много много стабилно, даже няма случай да се е издънило, а външни клиенти докато се научат да подават правилни JSON-и бая са се чесали защо им връща грешка. Накрая се научават разбира се Този парсер си има своите предимства и ограничения, но не можеш да го забиеш, поне не съм виждал такъв случай.
|
Пон Юни 24, 2019 12:19 am |
|
|