PIP 5.5.3
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.
 
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)
 Устанавливает значение и тип элемента из "v". Подробнее...
 
void clear ()
 Очищает элемент и устанавливает его в PIJSON::Invalid.
 
int size () const
 Возвращает размер массива элементов если тип PIJSON::Array, размер словаря элементов если тип PIJSON::Object, иначе возвращает 0.
 
bool contains (const PIString &key) const
 Возвращает содержит ли словарь элементов ключ "key" если тип PIJSON::Object, иначе возвращает false.
 
void resize (int new_size)
 Устанавливает тип элемента в PIJSON::Array и изменяет размер массива элементов на "new_size".
 
PIJSONoperator= (const PIVariant &v)
 Аналог setValue().
 
const PIJSONoperator[] (int index) const
 Возвращает элемент из массива по индексу "index" если тип PIJSON::Array, иначе возвращает недействительный PIJSON.
 
PIJSONoperator[] (int index)
 Устанавливает тип элемента в PIJSON::Array, изменяет размер массива при неоходимости и возвращает элемент из массива по индексу "index".
 
PIJSONoperator<< (const PIJSON &element)
 Устанавливает тип элемента в PIJSON::Array и добавляет элемент в массив.
 
PIJSONoperator<< (const PIVariant &value)
 Устанавливает тип элемента в PIJSON::Array и добавляет элемент в массив.
 
PIJSON operator[] (const PIString &key) const
 Возвращает элемент из словаря по ключу "key" если тип PIJSON::Object, иначе возвращает недействительный PIJSON.
 
PIJSONoperator[] (const PIString &key)
 Устанавливает тип элемента в PIJSON::Object и возвращает элемент из словаря по ключу "key". Если элемента с таким ключом не существует, он будет создан.
 
PIString toJSON (PrintType print_type=Compact, bool mask_unicode=true) const
 Возвращает текстовое представление дерева JSON.
 

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

static PIJSON fromJSON (PIString str)
 Разбирает текстовое представление JSON "str" и возвращает его корневой элемент.
 

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

Класс 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:36
PIString toJSON(PrintType print_type=Compact, bool mask_unicode=true) const
Возвращает текстовое представление дерева JSON.
Definition: pijson.cpp:366
static PIJSON fromJSON(PIString str)
Разбирает текстовое представление JSON "str" и возвращает его корневой элемент.
Definition: pijson.cpp:373
#define piCout
Макрос для условного (piDebug) вывода в PICout(StdOut)
Definition: picout.h:35
[
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:98
const PIVector< PIJSON > & array() const
Возвращает массив элементов этого элемента, либо пустой массив, если тип элемента не PIJSON::Array.
Definition: pijson.cpp:233
top-level:
PIVariant(Bool, 1)
[2]["str"]:
text
@ String
Definition: pijson.h:49
@ Invalid
Definition: pijson.h:45
Вариантный тип.
Definition: pivariant.h:219

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

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:70
Класс строки.
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 

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

Number 

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

String 

Текст

Object 

Объект, {}

Array 

Массив, []

◆ PrintType

Вариант генерации JSON.

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

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

Tree 

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

Методы

◆ setValue()

void PIJSON::setValue ( const PIVariant v)

Устанавливает значение и тип элемента из "v".

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