Форум программистов, компьютерный форум CyberForum.ru

Boost, JSON, объект. Распарсить строку - C++

Восстановить пароль Регистрация
 
MatthewThunder
0 / 0 / 0
Регистрация: 15.05.2013
Сообщений: 18
28.04.2014, 09:38     Boost, JSON, объект. Распарсить строку #1
Доброго времени суток! Столкнулся с такой проблемой: никак не могу бустом распарсить такую вот строку:
Javascript
1
{"data" : {"line_1": [1,2,3,4,5],"line_2": [5,4,3,2,1]}}
Подскажите каким образом можно достать обьект? Спасибо!

UPD: Мой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
void    j_parse()
    {
        string json_string = "{ \"data\" : {\"line_1\":[1, 2, 3, 4, 5], \"line_2\" : [5, 4, 3, 2, 1]} }";
        //Создаем входной поток
        std::stringstream InputStream(json_string);
 
        try
        {
            // Создаем обьект PropertyTree
            boost::property_tree::ptree InputTree;
 
            //Читаем JSON - строку
            boost::property_tree::read_json(InputStream, InputTree);
 
            // Получаем отформатированную JSON - строку
            boost::property_tree::write_json(InputStream, InputTree);
 
            string InputString;   // Входная JSON - строка
            InputString = InputStream.str();
 
            // Корректируем ошибку  JSON, связанную с появлением символа \/ вместо /
            int pos = InputString.find("\\");
            if (pos>-1)
                InputString = InputString.replace(InputString.find("\\"), 1, "");
            // Выводим входную строку на экран
            cout << endl << "Entered JSON - string: " << endl;
            cout << InputString << endl;
 
            // Извлекаем даные из обьекта InputTree
            string line1 = InputTree.get<string>("line_1");
            string line2 = InputTree.get<string>("line_2"); 
            string data = line1 + ' ' + line2;
            // Создаем оьект OutputTree
            boost::property_tree::ptree OutputTree;
            // Создаем в нем пару ключ-значение
            OutputTree.put("Result", data);
 
            //Создаем выходной поток
            std::stringstream output_stream;
 
            //Записываем JSON-строку в выходной поток
            boost::property_tree::write_json(output_stream, OutputTree);
 
            //Получаем JSON-строку из потока
            string outputJSONCode = output_stream.str();
 
            cout << endl << "Output JSON - string: " << endl;
 
            // Корректируем ошибку  JSON, связанную с появлением символа \/ вместо /
            /*pos = outputJSONCode.find("\\");
            if (pos>-1)
            outputJSONCode = outputJSONCode.replace(outputJSONCode.find("\\"),1,"");*/
 
            // Выводим результат на экран
            cout << outputJSONCode << endl;
            
        }
        catch (boost::property_tree::json_parser_error& error)
        {
            cout
                << error.message() << ": "
                << error.filename() << ", line "
                << error.line() << endl;
        }
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2014, 09:38     Boost, JSON, объект. Распарсить строку
Посмотрите здесь:

при вызове конструктора присваивания надо возвращать ссыль на объект или сам объект. Смысл? Значения нужных полей меняютмся и без этого! C++
C++ ввести строку символов. Сформировать строку вдвое большей длины, где каждый символ предворяется пробелом. Вывести полученную строку.
интерфейс, в методе которого создается объект типа IDictionary и возвращается ссылка на этот объект C++
компилятор считает объект l-value, но объект таковым не является C++
Как распарсить строку и положить данные в элементы структуры C++
Может ли объект-член, или объект-элемент достучаться к содержащему его? C++
Распарсить строку, найти числа. произвести арифметические операции C++
C++ Создать объект стек и создать объект очередь с перегруженными операциями

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14184 / 6199 / 984
Регистрация: 02.05.2013
Сообщений: 10,324
Завершенные тесты: 1
28.04.2014, 21:25     Boost, JSON, объект. Распарсить строку #2
Насколько я помню, Boost-овский парсер JSON не поддерживает массивы.
Так что здесь следует использовать что-то другое - rapidjson, libjson, jsoncpp и т.д.
Yandex
Объявления
28.04.2014, 21:25     Boost, JSON, объект. Распарсить строку
Ответ Создать тему
Опции темы

Текущее время: 08:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru