Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MatthewThunder
0 / 0 / 0
Регистрация: 15.05.2013
Сообщений: 18
#1

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

28.04.2014, 09:38. Просмотров 529. Ответов 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;
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2014, 09:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Boost, JSON, объект. Распарсить строку (C++):

Распарсить строку - C++
Строку unsigned char string={&quot;777;5V7;0&quot;} по условию необходимо разбить на 777, 5, V, 7, 0 - всего получается 5 элементов, подскажите с...

Распарсить строку на состовляющие - C++
Всем привет, ещё до того как заняться программированием я слышал что работа со строками в этом самом программировании это тихий ужас, и...

Как распарсить строку и положить данные в элементы структуры - C++
Здравствуйте! Интересует следующий вопрос. У нас есть есть строка. Например, ab|ac|ad|ae|af|ag|ah. И есть структура -&gt; struct table ...

Распарсить строку, найти числа. произвести арифметические операции - C++
Кто подскажет по поводу такого вопроса, сразу говорю есть строка ansistring, вида &quot;12,12,33,56,23,67&quot; причем цифр в строке всегда разное...

Распарсить строку и записать дату рождения в три целочисленные переменные - отдельно день, месяц и год - C++
Столкнулся с такой проблемой, дана строка(дата рождения, числа разделены двоеточиями ) ,из нее нужно записать все в переменные день месяц...

Как преобразовать объект string в строку char*? - C++
Доброго времени суток! Недавно я писал код, и обнаружил, что в качестве имя файла при объявлении объектов ifstream/ofstream нельзя...

1
Убежденный
Ушел с форума
Эксперт С++
15708 / 7219 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
28.04.2014, 21:25 #2
Насколько я помню, Boost-овский парсер JSON не поддерживает массивы.
Так что здесь следует использовать что-то другое - rapidjson, libjson, jsoncpp и т.д.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2014, 21:25
Привет! Вот еще темы с ответами:

Может ли объект-член, или объект-элемент достучаться к содержащему его? - C++
Предположим, class A { ... }; class B { .... A a; ... };

интерфейс, в методе которого создается объект типа IDictionary и возвращается ссылка на этот объект - C++
Привет всем. Необходимо реализовать интерфейс, в методе которого создается объект типа IDictionary и возвращается ссылка на этот объект. Не...

Основы: указатель на объект или объект, что выбрать? - C++
Не до конца понимаю (или вообще не понимаю) когда лучше использовать указатель на объект, а когда объект. Например: // есть класс ...

компилятор считает объект l-value, но объект таковым не является - C++
итак есть базовый абстрактный класс Дерево, есть два его наследника Плодовое Дерево и Лесное Дерево. Также существует класс Контейнер...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.