Как разобрать JSON в C ++

How Parse Json C



Цель этого руководства - понять данные JSON и понять, как анализировать данные JSON в C ++. Мы обсудим данные JSON, объект, массив, синтаксис JSON, а затем рассмотрим несколько рабочих примеров, чтобы понять механизм анализа данных JSON в C ++.

Что такое JSON?

JSON представляет собой легкое текстовое представление для хранения и передачи структурированных данных организованным способом. Данные JSON представлены в виде упорядоченных списков и пар ключ-значение. JSON означает J ава S скрипт ИЛИ bject N открытие. Как видно из полного названия, он получен из JavaScript. Однако данные JSON поддерживаются в большинстве популярных языков программирования.







Он часто используется для передачи данных с сервера на веб-страницу. Представлять структурированные данные в JSON намного проще и чище, чем в XML.



Правило синтаксиса JSON

Вот правила синтаксиса JSON:



  1. Данные JSON всегда должны быть в виде пар 'ключ-значение'.
  2. Данные JSON разделяются запятыми.
  3. Фигурная скобка используется для представления объекта JSON.
  4. Квадратная скобка используется для представления массива JSON.

Что такое данные JSON?

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





Имя: Дрейк

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



Расширение файла JSON

Данные JSON обычно хранятся в файле с расширением .json. Например, чтобы сохранить данные сотрудника, вы можете просто назвать файл «employee.json». Это будет простой текстовый файл. Затем вы можете открыть этот файл JSON в любом из ваших любимых текстовых редакторов.

Объект JSON

Объект JSON - это не что иное, как данные JSON, заключенные в фигурные скобки. Вот пример объекта JSON:

{
Имя:Дрейк,
ID сотрудника:23547a,
Телефон: 23547,
отделение:Финансы
}

Объект JSON может содержать несколько данных JSON. Все данные JSON разделяются запятой. Данные JSON представлены в виде пар 'ключ-значение'. Ключ, то есть Имя, и значение, то есть Дрейк, разделяются двоеточием. В приведенном выше примере есть четыре пары 'ключ-значение'. Первый ключ - это Имя; Дрейк - соответствующее значение для него. Точно так же EmployeeID, Phone и Department - это три других ключа.

Массив JSON

Массив JSON может содержать несколько объектов JSON, разделенных запятыми. Массив JSON заключен в квадратные скобки. Давайте посмотрим на пример массива JSON:

'Студенты':[
{'имя':'Шон', 'фамилия':'Коричневый'},
{'имя':'Дрейк', 'фамилия':'Уильямс'},
{'имя':'Том', 'фамилия':'Миллер'},
{имя:Питер,фамилия:Джонсон}
]

Это пример массива JSON. Здесь студенты заключены в квадратные скобки, то есть массив, и он содержит четыре объекта JSON. Каждый из этих объектов представлен в виде пар 'ключ-значение' и разделен запятыми.

Пример файла JSON

Теперь, когда мы разобрались с данными JSON, объектами JSON, массивом JSON, давайте посмотрим на пример файла JSON:

{
имя:Шон,
фамилия:коричневый,
Студенческий билет: 21453,
отделение:Компьютерный Sc.,
Предметы:[Математика,Phy,Chem]
}

Разбор библиотек в C ++:

В C ++ нет собственного решения для анализа данных JSON. Однако существует несколько библиотек для анализа данных JSON в C ++. В этой статье мы рассмотрим две самые популярные библиотеки для анализа данных JSON на C ++. Вот ссылки GitHub для анализа данных JSON:

  1. https://github.com/nlohmann/json
  2. https://github.com/Tencent/rapidjson/

Вы можете загрузить эти библиотеки, чтобы иметь возможность выполнять примеры, показанные ниже.

Примеры

Теперь у нас есть базовое представление о данных JSON, объектах, массивах и доступных библиотеках синтаксического анализа. Давайте теперь рассмотрим несколько примеров для анализа данных JSON в C ++:

  • Пример-1: Разбор JSON в C ++
  • Пример-2: синтаксический анализ и сериализация JSON в C ++
  • Пример-3: Разбор JSON в C ++

В Примере-1 и Примере-2 мы собираемся использовать библиотеку nlohmann. В случае Примера-3 мы будем использовать библиотеку RapidJSON.

Пример-1: Разбор JSON в C ++

В этом примере программы мы продемонстрируем, как получить доступ к значениям данных JSON в C ++.

#включают
#include 'json.hpp'

используя jsonзнак равноНлохманн::json;

intглавный()
{

// jdEmployees
json jdEmployeesзнак равно
{
{'имя','Шон'},
{'фамилия','Коричневый'},
{'Студенческий билет',21453},
{'Отделение',«Компьютерные науки».}
};

// Доступ к значениям
часы::нитьfNameзнак равноjdEmployees.ценить('имя', 'ой');
часы::нитьlNameзнак равноjdEmployees.ценить('фамилия', 'ой');
intsIDзнак равноjdEmployees.ценить('Студенческий билет', 0);
часы::нитьотделзнак равноjdEmployees.ценить('Отделение', 'ой');

// Распечатываем значения
часы::Стоимость << 'Имя: ' <<fName<<часы::конец;
часы::Стоимость << 'Фамилия: ' <<lName<<часы::конец;
часы::Стоимость << 'Студенческий билет: ' <<sID<<часы::конец;
часы::Стоимость << 'Отделение: ' <<отдел<<часы::конец;

возвращение 0;
}

Пример-2: синтаксический анализ и сериализация JSON в C ++

В этом примере программы мы увидим, как анализировать и сериализовать JSON в C ++. Мы используем json :: parse () для анализа данных JSON.

#включают
#include 'json.hpp'
#включают

используя jsonзнак равноНлохманн::json;

intглавный()
{
// Вот текст JSON
charтекст[] знак равнор'(
{
'
Книга': {
'
Ширина': 450,
'
Рост': 30,
'
Заголовок':'Привет, мир',
'
isBiography': ложный,
'
NumOfCopies': 4,
'
LibraryIDs': [2319, 1406, 3854, 987]
}
}
) '
;

// Давайте проанализируем и сериализуем JSON
json j_completeзнак равноjson::разбирать(текст);
часы::Стоимость <<часы::Setw(4) <<j_complete<<часы::конец;
}

Пример-3: Разбор JSON в C ++

Теперь мы продемонстрируем, как анализировать строку JSON с помощью библиотеки RapidJSON. RapidJSON изначально был вдохновлен RapidXML. В этом примере программы мы анализируем строку JSON в DOM. Мы объявили mydoc типа Document, а затем использовали метод mydoc.parse () для анализа строки JSON.

#включают
#include 'rapidjson / writer.h'
#include 'rapidjson / document.h'
#include 'rapidjson / stringbuffer.h'

с использованием пространства имен rapidjson;

intглавный()
{

const char*jsonзнак равно '{'имя':'Шон','фамилия':'коричневый','empId': 21453,
'
отделение':'Компьютерный Sc.'}';

// Разбираем строку JSON в DOM
Документ mydoc;
mydoc.Разобрать(json);

// DOM в строку
Буфер StringBuffer;
Писатель<StringBuffer>писатель(буфер);

mydoc.Принимать(писатель);

// Распечатываем вывод
часы::Стоимость <<буфер.GetString() <<часы::конец;

возвращение 0;
}

Заключение

В этой статье мы кратко обсудили JSON данные, объект, массив и синтаксис. Как мы знаем, в C ++ нет собственного решения для синтаксического анализа данных JSON; мы использовали две разные библиотеки для анализа данных JSON в C ++. Мы рассмотрели три разных примера, чтобы продемонстрировать механизм синтаксического анализа данных JSON в C ++. По сравнению с библиотекой nlohmann RapidJSON небольшой, быстрый и удобный для памяти.