Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 08.01.2019
Сообщений: 27

Разбор составной строки JSON

25.02.2019, 14:39. Показов 2715. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такая строка JSON.

JSON
1
2
3
4
5
6
7
8
9
{
    "Index": "Имя1",
    "Packets": {
        "Pak1": [12, [1, 2]],
        "Pak2": [22, [2, 2]],
        "Pak3": [32, [2, 2]]
    },
    "description": "Описание параметра"
}
Пары разбираю без проблем. А вот с вложенной строкой и массивом возникли проблемы.
Как вытянуть значения из "Pak1": [12, [1, 2]].
Спасибо.

ПС я понимаю, что вопрос довольно простой, но я не знаю как его реализовать. Поэтому хотелось бы в ответе увидеть конкретное решение. Спасибо за понимание
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.02.2019, 14:39
Ответы с готовыми решениями:

Разбор json
Есть json объект который может быть получен в программе { "status": "OK", "struct": { "full": 2, ...

Разбор строки
Доброго времени суток. Прошу Вашей помощи в этом казалось бы не сложном деле. Не так давно пишу на Builder'e поэтому мой вопрос может...

JSON: отображение юникодной строки
Парсю JSON сайт. От туда получаю строку: \u041a\u0430\u043c\u0410\u0417 Как ее перевести на нормальный русский язык?

3
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,014
25.02.2019, 22:30
Если решать "в лоб", то можно, к примеру, использовать функцию PosEx совместно со строковым методом SubString.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
25.02.2019, 23:50
Лучший ответ Сообщение было отмечено Ramler как решение

Решение

А если решать через JSON-парсер - то вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    // в строке s содержится строка JSON-а
    // для начала парсим весь JSON, и получаем содержимое Packets
    std::auto_ptr<TJSONObject> Json(static_cast<TJSONObject*>(TJSONObject::ParseJSONValue(s)));
    TJSONObject *obj = static_cast<TJSONObject*>(Json->Get("Packets")->JsonValue);
 
    // теперь получаем из строки, хранящейся в Packets, json, и дальше работаем с ним
    std::auto_ptr<TJSONObject> InnerJson(static_cast<TJSONObject*>(TJSONObject::ParseJSONValue(obj->ToString())));
    // работаем с элементом Pak1, это массив, поэтому приводим к JSONArray*
    TJSONArray *Jarr = static_cast<TJSONArray*>(InnerJson->Get("Pak1")->JsonValue);
 
    String first = Jarr->Get(0)->Value(); // Первый элемент - с ним все просто
    // а вот чтобы получить содержимое второго - надо его опять привести к JSONArray*, и получить оба его элемента
    TJSONArray *second = static_cast<TJSONArray*>(Jarr->Get(1));
    String second_0 = second->Get(0)->Value();
    String second_1 = second->Get(1)->Value();
В итоге first = "12", second_0 = "1", second_1 = "2"
3
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
26.02.2019, 00:25
Давно не юзал С++, но:
1) используйте библиотеку jsoncpp
2) и попробуйте заюзать такую структуру данных для конвертации
C++
1
2
3
4
5
6
7
public class RootObject
{
    public:
        string Index;
        string description;     
        std::unordered_map<string, std::unordered_map<unsigned int, std::vector<unsigned int>>> Packets;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.02.2019, 00:25
Помогаю со студенческими работами здесь

Разбор JSON строки через ScriptControl.Eval
Привет, В скрипт поступает JSON строка вида {a:7,b:8} Она парсится следующим образом str = &quot;{a:7,b:8}&quot; Set...

Разбор JSON, используя Newtonsoft.Json
Добрый день! Подскажите пожалуйста, как десериализовать JSON-ответ следующего вида {&quot;result&quot;: ...

Пропадает конец Json строки, при передаче Json строки через Ajax
Всем привет. Возникла следующая проблема. Из php получаю json строку, полученную с помощью json_encode() Далее, её отправляю обратно...

Разбор JSON
Всем привет! Помогите пожалуйста разобрать ответ сервера, мне самому не хватает знаний. Я использую Newtonsoft.Json.dll -...

Разбор JSON
Нужно разобрать json {'name','xxx'} и вывести все имена в массиве, есть у кого подобная реализация? Добавлено через 3 минуты и какой...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru