Розбір JSON за допомогою C [закрито]


82

Я намагаюся знайти хороший спосіб проаналізувати JSON на C. Мені справді не потрібна величезна бібліотека чи щось інше, я б скоріше мав щось маленьке та легке з мінімальним мінімумом можливостей, але хорошу документацію.

Хтось має щось, на що мені може вказати?


5
Ви використовуєте дистрибутив Linux?
Нік


Чи буде працювати бібліотека-c? Я використовую TouchJson на своєму mac, коли в obj-c він дуже простий у використанні і невеликий.
Нік

Коли ви говорите "мінімальний мінімум", наскільки мінімальним ви можете насправді піти? Деякі з них будуть обробляти різні кодування Unicode, деякі тільки UTF-8, а деякі тільки звертають увагу на «символи формату» ASCII , такі як {, [, ], }, ,, ", і зворотний. Вони можуть і не залишати перетворювати вхідні послідовності Unicode до вас, вони можуть залишати за вами, щоб перевірити, чи знаходяться цифри в межах допустимого діапазону Unicode і т. Д. Тоді існує велика різниця між синтаксичним аналізом довільного JSON на дерева проти відомого JSON на C структури.
hippietrail

Відповіді:


74

Для початку Json не є величезною мовою, тому бібліотеки для нього, ймовірно, будуть невеликими (принаймні ніж бібліотеки Xml).

Існує ціла тона бібліотек C, пов’язаних на Json.org . Можливо, хтось із них добре підійде для вас.


3
Так, дякую за відповідь! Я пройшов купу їх, і вони були досить погано задокументовані / підтримувані. Я думав, що спробую тут, перш ніж страждати через інтеграцію одного .... :)
dshipper

2
@dshipper: sourceforge.net/projects/cjson виглядає дещо багатообіцяючим, враховуючи ваші вимоги. Я не користувався жодною з цих бібліотек особисто, тому я не можу рекомендувати її. Пропозиції щодо єдиної бібліотеки, у будь-якому випадку, можуть бути лише думкою, а не остаточною відповіддю :)
Мерлін Морган-Грем

5
@dshipper: Я мав хороший досвід роботи з Янсон, який є легким і добре задокументованим. digip.org/jansson/doc/2.1
Дітріх Епп

1
@Dietrich, dshipper: Я щойно подивився на Янссона. Я погоджуюсь, що він добре задокументований і досить невеликий, і, схоже, він має хороший набір тестів. Можливо, це теж відповідало б вашим вимогам. Але, мабуть, є кілька бібліотек, які б працювали. Я рекомендую вам якнайкраще абстрагувати свої залежності Json, спробувати кілька бібліотек і подивитися, що приносить вам найменше горя :)
Мерлін Морган-Грем

Отже, @dshipper, ти пішов на sourceforge.net/projects/cjson чи що?
Моуг каже, відновити Моніку

37

cJSON має пристойний API і невеликий (2 файли, ~ 700 рядків). Багато інших аналізаторів JSON, які я спочатку переглядав, були величезними ... Я просто хочу проаналізувати деякі JSON.

Редагувати: Ми роками внесли деякі вдосконалення в cJSON.


10

Jsmn досить мінімалістичний і має лише дві функції для роботи.

http://zserge.bitbucket.org/jsmn.html


Одним недоліком jsmn є те, що він не обробляє вхідні послідовності Unicode. У його джерелі ви побачите: /* Allows escaped symbol \uXXXX */... case 'u':.../* TODO */
hippietrail

14
Крім того, все, що він робить, - це давати вам токени, бажаючи успіху, розуміючи дані. Це справді виглядає як найменша, ефективна річ, яку ви можете зробити, але це теж не робить багато.
NateS

Очевидно, вони виправили своє "TODO" для символів Unicode.
aviggiano

9

NXJSON - повнофункціональний, але дуже маленький (~ 400 рядків коду) парсер JSON, який має простий у використанні API:


Оскільки ви здаєтесь розробником NXJSON, можливо, ви можете прокоментувати, як він порівнюється з cJSON чи іншими варіантами?
Метт

5
Прості речі робляться простим способом - це основна відмінність NXJSON від більшості інших аналізаторів. cJSON також простий, але, крім json parser, він також включає конструктор json, а також серіалізатор. cJSON потребує більше пам'яті, оскільки дублює всі рядки, тоді як NXJSON виконує всі маніпуляції на місці, руйнуючи оригінальний вміст. Залежно від вашого завдання ці відмінності можна розглядати як переваги, так і недоліки. NXJSON також обробляє коментарі, що добре для аналізу конфігураційних файлів.
Ярослав Ставнічий

9

Ви можете поглянути на Янссона

На веб-сайті зазначено таке: Jansson - це бібліотека C для кодування, декодування та обробки даних JSON. Він має:

  • Простий та інтуїтивно зрозумілий API та модель даних
  • Може кодувати та декодувати з JSON
  • Всебічна документація
  • Немає залежностей від інших бібліотек
  • Повна підтримка Unicode (UTF-8)
  • Великий набір тестів

1
Пряме посилання на Github: github.com/akheron/jansson
Ray Hulha

Я спокусився використовувати jsmnчерез його швидкість [1], але він не підтримує кодування. Крім того, Jansson дуже простий у використанні. --- [1] translate.google.it/…
Марко Сулла

OjC швидкий і підтримує кодування. github.com/ohler55/ojc
Пітер Олер

Джансон - моя команда для розбору JSON в C
Кеннет Вільке

8

Я використовував JSON-C для робочого проекту і рекомендував би його. Легкий і випускається з відкритим ліцензуванням.

Документація включена до розподілу. В основному у вас є *_addфункції для створення об'єктів JSON, еквівалентні *_putфункції для звільнення їх пам'яті та утилітні функції, які перетворюють типи та вихідні об'єкти у рядковому поданні.

Ліцензування дозволяє включити ваш проект. Ми використовували його таким чином, компілюючи JSON-C як статичну бібліотеку, яка пов'язана з основною збіркою. Таким чином, нам не доведеться турбуватися про залежності (крім встановлення Xcode).

JSON-C також створений для нас під OS X (x86 Intel) та Linux (x86 Intel) без інцидентів. Якщо ваш проект повинен бути портативним, це хороший старт.


6

Вам потрібно проаналізувати довільні структури JSON або просто дані, специфічні для вашої програми. Якщо останній, ви можете зробити його набагато легшим та ефективнішим, не створюючи жодної хеш-таблиці / структури карти, що відображає ключі JSON у значення; Ви можете натомість просто зберігати дані безпосередньо в полях структури або що завгодно.


2
Це дуже важливий момент при використанні JSON з нединамічними мовами, такими як C. Але це не відповідь, тому насправді має бути коментарем до питання OP.
хіппітрейл

+1 за креативне мислення! Як би це працювало? Чи не можна все-таки використати особливо легку бібліотеку? Розбір на поля структури все ще звучить як неабияка робота.
CL22,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.