LINUX.ORG.RU

JSON в чистом Си

 ,


3

2

Какую библиотеку посоветуете для работы с json в чистом Си? Гугл сходу выдает json-c и jansson. Какая лучше? Или искать третью?

★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

Ответ на: комментарий от Corey

это не осадочек, а особенность. я вижу преимущество в том, что бы до парсера конфиг пропустить через эдакий валидатор. Но ведь правда, за простотой - это к ini-конфигам.

Для коментов еще можно делать

 "#comment": "Вот здесь косяк, не надо так делать, в общем случае работать не будет" 
- такой атрибут, и игнорить его при парсинге :) Так что, костыли разных модификаций доступны

Deleted
()
Ответ на: комментарий от quantum-troll

goto — пофиг. Но столько копипасты — это жесть! Достаточно же было написать

if (!(c->std_output & (EXEC_OUTPUT_KMSG | EXEC_OUTPUT_SYSLOG | EXEC_OUTPUT_JOURNAL ...)) ... ) 
Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Corey

cmake — продукт вантузятника что ли? Странно как-то. Я просто с подобным не сталкивался (т.к. конфиг-файлы cmake'ом еще не генерировал).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

По хорошему, вообще следует избегать кода, приводящего к подобным if'ам.

quantum-troll ★★★★★
()
Ответ на: комментарий от quantum-troll

По мне так вполне читаемо

Ну что-то в этом есть, признаюсь.

Corey
()
Ответ на: комментарий от Eddy_Em

cmake — продукт вантузятника что ли?

Когда тебе нужно собирать кусочки проекта под 5 разных платформ, выбор обычно бывает невелик.

Corey
()

Присоединяюсь к вопросу. Ищу JSON библиотеку, которая умеет вот так:

int n = json_object_dotget_number(root_object, "object.nestedobject.nested number");

Желательно, с поддержкой массивов. В parson такое API есть, но обрабатывать в таком стиле массивы она не умеет.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Это пример того, как можно убрать из языка всю лишнюю пунктуацию и значительно упростить разбор, просто думая как программист на Forth.

quantum-troll ★★★★★
()
Ответ на: комментарий от quantum-troll

Это замечательно, но я пока не знаю Forth и не имею желания писать свой парсер для конфигурационных файлов. Так что мне и libconfig хватит.

i-rinat ★★★★★
()

Элементарно самому сделать, не?
Пишешь грамматику, генеришь парсер для Си, наполняешь где надо семантику. И всё.
Не понимаю, зачем такие элементарные хотелки выносить на форум.

UPD глядя на убогое описание в RFC4627 начинаю задумываться об уровне вышевысказавшихся разработчиков .

d_Artagnan ★★
()
Последнее исправление: d_Artagnan (всего исправлений: 1)
Ответ на: комментарий от Corey

JSON есть подмножество YAML, так что если используете YAML парсер, то можете смело писать конфиги в JSON уже сегодня

redbaron ★★
()
Ответ на: комментарий от redbaron

Ах вот что имелось в виду под «подмножество yaml»... Загуглил, просветился. А я-то думал, что утверждалось просто то, что данные, смоделированные в json, можно один к одному воспроизвести средствами yaml, но не наоборот.

Corey
()
Последнее исправление: Corey (всего исправлений: 1)

В сети по разным углам распихан файлик JSON_parser.c мутного происхождения. Несмотря на это, работает хорошо, сишечка чистейшая, багов не обнаружено.

const86 ★★★★★
()

frozen минималистичный парсер json написан на c.

dhampire ★★★
()

Есть вариант от соотечественника nxjson.

Для всех парсеров надо смотреть проверки на непредсказуемые входные данные. А также на размеры входных данных. Если, конечно, интересна безопасность.

gh0stwizard ★★★★★
()
Ответ на: комментарий от Eddy_Em

Достаточно же было написать

Это если EXEC_OUTPUT_* — битовая маска. А если EXEC_OUTPUT_KMSG == 0, EXEC_OUTPUT_SYSLOG == 1, EXEC_OUTPUT_JOURNAL == 2, а c->std_output == 3, то

c->std_output != EXEC_OUTPUT_KMSG && c->std_output != EXEC_OUTPUT_SYSLOG && c->std_output != EXEC_OUTPUT_JOURNAL == TRUE,

а (!(c->std_output & (EXEC_OUTPUT_KMSG | EXEC_OUTPUT_SYSLOG | EXEC_OUTPUT_JOURNAL))) == FALSE

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от Eddy_Em

XML — говнище, которое ни человеку, ни машине не нужно!

ну, зачем же так радикально! вполне себе годный формат. и много где используется.
другое дело, что XML в полном варианте, с XPath и прочими прибамбасами редко кто вообще знает. мне как-то понадобилось вникнуть в XSLT, я на нём скриптики писала, тогда наловчилась работать с XML по-настоящему. там очень много возможностей, на самом деле.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Eddy_Em

УБИВАТ!!!

да не надо никого убивать. иногда графическая конфигурялка для юзера - самое важное и нужное дело.
у меня как-то был настройка одной железки, так у неё было более 300 параметров (в прошивку очень много разных конфигов передавалось). сначала был ini-файл с хитрожопым форматом (сами параметры тоже были неслабые). юзеры постоянно писали в конфиге х-ню и потом бегали и доставали меня вопросом: а чо не работает? а потом я написала конфигурялку, которая проверяла валидность параметров и частично автоматизировала процесс заполнения конфига - и наступило всеобщее счастье. и мне спокойно, и юзеры довольны.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

годный формат

Только для BDSM-извращенцев!

иногда графическая конфигурялка для юзера - самое важное и нужное дело

В гей-оси или мастдайке! Когда пишется софт для обезьян.

у меня как-то был настройка одной железки, так у неё было более 300 параметров

Что-то здесь явно не так. Наверняка ведь "простому смертному" все 300 настртаивать и не нужно! Т.е. надо было прислюнить "правильный" файл настройки, а юзвери уж потом пусть что надо им, то и правят. Ну и можно из командной строки было сделать запуск программки с сохранением параметров. Это лучше, чем отдельную гуйню лепить.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Только для BDSM-извращенцев!

почти все биллинги и обменные системы в банках в основе данных юзают XML. и никто не жужжит.

В гей-оси или мастдайке! Когда пишется софт для обезьян.

при чём тут ось? настройки - это всего лишь настройки. а хороший интерфейс устраивает пользователя и программиста не особо напрягает. если хочется хардкора - пожалуйста, есть файл конфига и даже командная строка. можно написать полкилометра параметров, но вот это точно БДСМ :)

Что-то здесь явно не так. Наверняка ведь «простому смертному» все 300 настртаивать и не нужно!

ну, не простому смертному. мы не работали с таковыми, юзерами были техники на производстве. и техник должен уметь менять параметры. а он ни разу не программист! когда даже специалисты из нашего отдела сборки не смогли осилить документацию на все параметры, мы решили сделать графическую утильку, которая упрощала создание нужных конфигов. никто от этого не пострадал, я её накропала за пару дней, а настройщикам и техникам стало намного легче.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Eddy_Em

да, надо сказать, что утилька ещё умела прогружать параметры «на лету» и могла коннектиться откуда угодно, по сети. что было дополнительным плюсом в обслуживании машин.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

почти все биллинги и обменные системы в банках в основе данных юзают XML

Банкиры и логика несовместимы.

при чём тут ось?

Менталитет.

техник должен уметь менять параметры. а он ни разу не программист!

Дык, если рассчитываете на обезьянок, то да — делать надо для обезьянок. Согласен.

Но обычно для них под мастдайкой все делают, чтобы на свою голову поменьше проблем искать: всегда можно отмазаться, что мастдайка виновата в глюках.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Банкиры и логика несовместимы.

а банкиры и не работают с данными. с ними работает сетевой софт, в основном. и софт проектировали вовсе не банкиры.

Дык, если рассчитываете на обезьянок, то да — делать надо для обезьянок. Согласен.

я не считаю сертифицированных специалистов обезьянками. просто у них кроме моей утильки ещё стопицот утилек и они должны настроить производство. создать людям геморрой всегда можно, но вопрос - зачем? я не сторонник создания геморроя, потому что жизнь меня научила одной простой вещи: чем легче юзеру понять твою софтину - тем меньше ты огребёшь гемора с поддержкой. поэтому для программиста как раз лучше потратить два дня на интерфейс, чем потом много лет икать от звонков со всего мира по поводу того, как им там настроить железяку, чтобы она работала :)

Iron_Bug ★★★★★
()
Ответ на: комментарий от Eddy_Em

насчёт маздая - ваще не вопрос. я последние годы почти весь юзхерский софт писала под кроссплатформу. так что у меня были варианты почти под любую ось. это тоже упрощает жизнь разработчика, ибо не требуется работа с кучей вариаций кода и поддержкой на разных платформах.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

Да уж, тяжела работа программиста. Если уж и соберусь "тракторить" с нынешней работы, то точно не в программисты.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от qulinxao

нет. меня создание семьи как-то не интересует. не то, чтобы я демонстративно что-то декларирую, но просто это ваще не моё и я в это не лезу. на семью нужно слишком много времени и бабла. я как представлю себе этот кошмар - не, нафиг-нафиг! я пробовала жить с людьми, но это крайне фигово получалось и в итоге я забила. во-первых, это постоянный вынос мозга: приходишь домой с репы ночью, и кто-то начинает тебя пилить. плюс начинаются споры по поводу того, что надо купить. вот я зарабатываю своё бабло и могу его просрать куда хочу и никто не вякнет слова поперёк. моё бабло и я решаю, как его тратить. плюс я могу играть посреди ночи на контре и никто не будет вонять, что я мешаю. я могу не готовить, если мне жрать не хочется, и забить на приборку на пару месяцев: в холостяцкой норе это ваще фиолетово. в общем, холостяцкая жизнь - это свобода и счастье :)

Iron_Bug ★★★★★
()
Ответ на: комментарий от AnDoR

yaml хотя бы человекописабельный

Не знаю, как на счет писабельности, но когда я вижу вот такие примеры на их сайте:

? - Detroit Tigers
  - Chicago cubs
:
  - 2001-07-23

? [ New York Yankees,
    Atlanta Braves ]
: [ 2001-07-02, 2001-08-12,
    2001-08-14 ]

мой внутренний парсер не справляется и глаза начинают нездорово кровоточить. Ямл выглядит, как какой-то ascii-art с рандомно раскиданными символами и отступами.

Corey
()
Ответ на: комментарий от AnDoR

Да и жирён он, на мой взгляд.

Пьяный, что ли.

http://yaml.org/spec/1.2/spec.html

  • Example 2.7. Two Documents in a Stream
  • Example 2.8. Play by Play Feed
  • Example 2.10. Node for “Sammy Sosa” appears twice in this document
  • Example 2.11. Mapping between Sequences
  • Example 2.15. Folded newlines are preserved for «more indented» and blank lines
  • Example 2.22. Timestamps
  • 2.4. Tags
Corey
()
Ответ на: комментарий от devsdc

А что не так с cmake? Часто вижу тут негодование в его сторону, а аргументов как-то не встречал.

слишком толсто :)

waker ★★★★★
()
Ответ на: комментарий от Eddy_Em

В общем, если тебе серьезно надо, то лучше свое напиши.

Эдди, всегда после своих вредных советов добавляй «Я - не программист! Помните это.», чтобы народ не смущать.

mix_mix ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.