У меня есть проект, который будет использовать один файл JSON для описания внутреннего содержимого каталога, в котором он содержится. Библиотека Boost Property Tree представляется лучшим выбором для библиотеки синтаксического анализа JSON. Однако этот JSON-файл (как и многие другие), как ожидается, будет иметь особый макет, и до сих пор я не нашел хорошего способа выражения правил в коде.

Есть ли в библиотеке Boost Property Tree какие-либо методы, позволяющие пользователю выполнять любое из следующих действий?

  • Запрещение нераспознанных ключей.
  • Указание ключей по мере необходимости или необязательно.
  • Указание ожидаемого значения типа ключей (null, bool, int, float, array, dictionary).

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

1
Jared 28 Май 2017 в 00:15

2 ответа

Лучший ответ

Дерево свойств не заняло у меня много времени из-за нехватки типов (как отметил Сехе).

Чтобы продолжить рекомендацию sehe, если вы имеете дело с JSON, я бы порекомендовал удобную для пользователя библиотеку, например библиотека nlohmann вместо. Это достаточно быстро и интуитивно понятно.

Существует также RapidJSON, который поглощает каждый бит выделения памяти и т. Д., Влияя на удобство использования, но является лучшим исполнителем в (своем) тесты. Я столкнулся с трудностями при работе с массивами из одного элемента, прежде чем перейти к nlohmann.

1
moodboom 29 Май 2017 в 02:43

Ни одна из указанных возможностей не поддерживается.

Хуже того, Property Tree даже не поддерживает типы данных JSON. На стороне JSON все будет строкой, несмотря ни на что.

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

Все это содержится в примерно 20 строках документации, которые объясняют JSON-интерфейс дерева свойств.

Из-за этих ограничений будьте внимательны и выберите библиотеку JSON, которая будет соответствовать вашим требованиям.

4
sehe 27 Май 2017 в 21:47