PIP 5.6.1
Platform-Independent Primitives
Открытые типы | Открытые члены | Открытые статические члены | Полный список членов класса
Класс PIJSON

Узел дерева JSON. Подробнее...

#include <pijson.h>

Открытые типы

enum  Type {
  Invalid , Null , Boolean , Number ,
  String , Object , Array
}
 Тип узла JSON. Подробнее...
 
enum  PrintType { Compact , Tree }
 Режим форматирования JSON-текста. Подробнее...
 

Открытые члены

 PIJSON ()
 Создает недействительный PIJSON.
 
 PIJSON (const PIJSON &o)=default
 Конструктор копирования.
 
const PIStringname () const
 Возвращает имя узла, либо пустую строку для безымянных узлов.
 
const PIVector< PIJSON > & array () const
 Возвращает дочерние элементы массива, либо пустой массив, если узел не имеет тип PIJSON::Array.
 
const PIMap< PIString, PIJSON > & object () const
 Возвращает поля объекта, либо пустой словарь, если узел не имеет тип PIJSON::Object.
 
const PIVariantvalue () const
 Возвращает скалярное значение узла.
 
bool toBool () const
 Возвращает скалярное значение как логическое.
 
int toInt () const
 Возвращает скалярное значение как целое число.
 
double toDouble () const
 Возвращает скалярное значение как число с плавающей точкой.
 
PIString toString () const
 Возвращает скалярное значение как строку.
 
Type type () const
 Возвращает тип узла.
 
bool isValid () const
 Возвращает, является ли узел действительным.
 
bool isObject () const
 Возвращает, является ли узел PIJSON::Object.
 
bool isArray () const
 Возвращает, является ли узел PIJSON::Array.
 
void setValue (const PIVariant &v)
 Устанавливает скалярное значение и обновляет тип узла для логических, числовых и строковых вариантов. Подробнее...
 
void clear ()
 Очищает содержимое узла и устанавливает тип PIJSON::Invalid.
 
int size () const
 Возвращает длину массива или число полей объекта. Для остальных типов возвращает 0.
 
bool contains (const PIString &key) const
 Возвращает, содержит ли узел-объект ключ key.
 
void resize (int new_size)
 Преобразует узел в массив и изменяет его размер. Новые элементы становятся пустыми строками.
 
PIJSONoperator= (const PIVariant &v)
 Аналог setValue().
 
PIJSONoperator= (const PIJSON &v)
 Оператор копирующего присваивания.
 
const PIJSONoperator[] (int index) const
 Возвращает элемент массива по индексу, либо недействительный PIJSON, если узел не является массивом.
 
PIJSONoperator[] (int index)
 Преобразует узел в массив, при необходимости увеличивает его и возвращает элемент по индексу.
 
PIJSONoperator<< (const PIJSON &element)
 Преобразует узел в массив и добавляет другой узел JSON.
 
PIJSONoperator<< (const PIVariant &value)
 Преобразует узел в массив и добавляет скалярное значение.
 
PIJSON operator[] (const PIString &key) const
 Возвращает поле объекта по ключу, либо недействительный PIJSON, если узел не является объектом или ключ отсутствует.
 
PIJSONoperator[] (const PIString &key)
 Преобразует узел в объект и возвращает поле по ключу, создавая его при необходимости.
 
PIJSON operator[] (const char *key) const
 Вспомогательная перегрузка для доступа по UTF-8 ключу.
 
PIJSONoperator[] (const char *key)
 Вспомогательная перегрузка для доступа по UTF-8 ключу.
 
PIString toJSON (PrintType print_type=Compact, bool mask_unicode=true) const
 Возвращает JSON-текст для дерева узлов.
 

Открытые статические члены

static PIJSON fromJSON (PIString str)
 Разбирает JSON-текст и возвращает корневой узел.
 
static PIJSON newObject (const PIVariantMap &fields={})
 Создает узел-объект, инициализированный из полей вариативного словаря.
 
static PIJSON newArray (const PIVariantVector &fields={})
 Создает узел-массив, инициализированный из вариативных элементов.
 
static PIJSON newString (const PIString &v=PIString())
 Создает строковый узел.
 
template<typename T >
static PIJSON serialize (const T &v)
 Сериализует значение v через набор перегрузок из pijsonserialization.h. Подробнее...
 
template<typename T >
static T deserialize (const PIJSON &json)
 Десериализует значение типа T через набор перегрузок из pijsonserialization.h. Подробнее...
 

Подробное описание

Узел дерева JSON.

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

Краткий обзор

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

Массивы заключены в квадратные скобки [], их элементы не имеют имени и разделяются запятыми.

Объекты заключены в фигурные скобки {}, их элементы имеют имя и разделяются запятыми.

Дерево PIJSON

PIJSON представляет собой элемент дерева JSON. Каждый элемент имеет тип (type()) и может иметь имя (name()). Если это конечный элемент,то он будет иметь значение, доступное через value(), toBool(), toInt(), toDouble() или toString().

Если элемент преставляет собой массив, то его размер доступен через size(), а элементы массива через целочисленный оператор []. Весь массив доступен через array().

Если элемент преставляет собой объект, то его размер доступен через size(), а элементы объекта через строковый оператор []. Проверить наличие элемента по имени можно с помощью contains(). Весь объект доступен через object().

Создать дерево из текстового представления JSON можно с помощью fromJSON(), а преобразовать в текст с помощью toJSON().

Создание PIJSON

Для создания нового дерева необходимо лишь создать пустой корневой PIJSON и заполнить его значениями, массивами или объектами с помощью целочисленного или строкового оператора []. В зависимости от типа аргумента элемент преобразуется либо в массив, либо в объект.

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

Маскирование/размаскирование

Строковые значения в стандарте JSON могут иметь в явном виде только печатные символы, спецсимволы и юникод должны быть преобразованы маскированием, т.е., например, вместо символа новой строки должно быть "\n", а не-ASCII символы должны быть в виде "\uXXXX".

Оператор вывода в PICout не выполняет маскирования строк.

Методы toJSON() и fromJSON() маскируют и размаскируют строковые поля.

Примеры

Чтение:

"["
" true,"
" 10,"
" {"
" \"num\":1.E-2,"
" \"str\":\"text\""
" },"
"]");
piCout << json;
piCout << json.toJSON();
Узел дерева JSON.
Definition: pijson.h:40
PIString toJSON(PrintType print_type=Compact, bool mask_unicode=true) const
Возвращает JSON-текст для дерева узлов.
Definition: pijson.cpp:366
static PIJSON fromJSON(PIString str)
Разбирает JSON-текст и возвращает корневой узел.
Definition: pijson.cpp:373
#define piCout
Definition: picout.h:36
[
true,
10,
{
"num": 1.e-2,
"str": "text"
}
]
[true,10,{"num":1.e-2,"str":"text"}]

Разбор:

"["
" true,"
" 10,"
" {"
" \"num\":1.E-2,"
" \"str\":\"text\""
" },"
"]");
piCout << "top-level:";
for (const auto & i: json.array())
piCout << i.value();
piCout << "[2][\"str\"]:";
piCout << json[2]["str"].toString();
PIString toString() const
Возвращает скалярное значение как строку.
Definition: pijson.h:104
const PIVector< PIJSON > & array() const
Возвращает дочерние элементы массива, либо пустой массив, если узел не имеет тип PIJSON::Array.
Definition: pijson.cpp:233
top-level:
PIVariant(Bool, 1)
[2]["str"]:
text
@ String
Definition: pijson.h:51
@ Invalid
Definition: pijson.h:47
Вариантный тип.
Definition: pivariant.h:216

Создание:
Простой массив

PIJSON json;
json[0] = -1;
json[1] = "text";
json[3] = false;
piCout << json.toJSON();
[-1,"text","",false]

Массив объектов

struct {
PIString surname;
PIString email;
} persons[] = {
{"Ivan", "Ivanov", "ivan@pip.ru"},
{"Igor", "Igorevich", "igor@pip.ru"},
{"Andrey", "Andreevich", "andrey@pip.ru"}
};
PIJSON obj;
PIJSON json;
int index = 0;
for (const auto & p: persons) {
obj["index"] = index++;
obj["name"] = p.name;
obj["surname"] = p.surname;
obj["email"] = p.email;
json << obj;
}
piCout << json;
const PIString & name() const
Возвращает имя узла, либо пустую строку для безымянных узлов.
Definition: pijson.h:75
Класс строки.
Definition: pistring.h:42
[
{
"name": "Ivan",
"email": "ivan@pip.ru",
"index": 0,
"surname": "Ivanov"
},
{
"name": "Igor",
"email": "igor@pip.ru",
"index": 1,
"surname": "Igorevich"
},
{
"name": "Andrey",
"email": "andrey@pip.ru",
"index": 2,
"surname": "Andreevich"
}
]

Перечисления

◆ Type

Тип узла JSON.

Элементы перечислений
Invalid 

Недействительный тип

Null 

Без значения, null

Boolean 

Логическое, true или false

Number 

Целое либо число с плавающей точкой

String 

Текст

Object 

Объект, {}

Array 

Массив, []

◆ PrintType

Режим форматирования JSON-текста.

Элементы перечислений
Compact 

Без пробелов, минимальный размер

Tree 

С пробелами и новыми строками, читаемый человеком

Методы

◆ setValue()

void PIJSON::setValue ( const PIVariant v)

Устанавливает скалярное значение и обновляет тип узла для логических, числовых и строковых вариантов.

Если тип "v" логический, то устанавливает тип в PIJSON::Boolean.
Если тип "v" любой численный, то устанавливает тип в PIJSON::Number.
Если тип "v" строковый, то устанавливает тип в PIJSON::String.
Если тип "v" любой другой, то устанавливает тип в PIJSON::Invalid.

◆ serialize()

template<typename T >
PIJSON PIJSON::serialize ( const T &  v)
static

Сериализует значение v через набор перегрузок из pijsonserialization.h.

Вспомогательная обертка над piSerializeJSON().

◆ deserialize()

template<typename T >
T PIJSON::deserialize ( const PIJSON json)
static

Десериализует значение типа T через набор перегрузок из pijsonserialization.h.

Вспомогательная обертка над piDeserializeJSON().