Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/146: Рейтинг темы: голосов - 146, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 15

Библиотека JSON, чтение файла

17.01.2019, 11:34. Показов 27290. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Использую следующую библиотеку JSON для C++ - https://github.com/nlohmann/json, по ней так же имеется статья на русском - https://habr.com/ru/company/infopulse/blog/254075/
Проблема заключается в том, что я не могу отыскать, как же парсить, читать определенные значения идентификатора непосредственно с файла JSON. К примеру, файл JSON выглядит так:
JSON
1
{"Settings":{"AutoReload":true,"CheckingUpdates":false}}
И необходимо получить значение Settings -> AutoReload, получить значение Settings -> CheckingUpdates, но как это сделать?
Может кто-то посоветует сменить библиотеку? Смотрел RapidJSON и jsonCPP, но не понял, каким образом там создаются объекты.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.01.2019, 11:34
Ответы с готовыми решениями:

JSON библиотека
Как и распарсить так и сбилдить. Что бы кушало utf-16,и было совместимо с visual studio.Есть ли такое в природе ? На гитхабе я нашел...

Работа с Json-файлами. Библиотека jsoncpp C+
Здраствуйте. Начал работу с json-файлами. С подключением всё нормально, но как только начинаю работать с методами json'a начинаються...

Json c++ send end write - существует ли готовая библиотека
Здрасте, нужна такая штука которая бы умела посылать json обьекты методом post на кукую-нить страницу и получать оттуда json обьект в...

6
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,517
17.01.2019, 12:10
Лучший ответ Сообщение было отмечено harryss как решение

Решение

Цитата Сообщение от harryss Посмотреть сообщение
И необходимо получить значение Settings -> AutoReload, получить значение Settings -> CheckingUpdates, но как это сделать?
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
#include <iostream>
 
#include <nlohmann/json.hpp>
 
using json = nlohmann::json;
 
int main()
{
    json config = {
        "Settings": {
            "AutoReload"      :true,
            "CheckingUpdates" :false
        }
    };
    
    const auto& settings = config["Settings"];
    
    const bool auto_reload 
        = settings.at("AutoReload").get<bool>();
    
    const bool checking_updates 
        = settings.at("CheckingUpdates").get<bool>();
 
    std::cout << "auto_reload = "      << auto_reload << '\n';
    std::cout << "checking_updates = " << checking_updates << '\n';
    
}
Цитата Сообщение от harryss Посмотреть сообщение
Может кто-то посоветует сменить библиотеку?
На мой взгляд, nlohmann - самая лучшая на сегодняшний день библиотека для json)))

Сочетает в себе такие качества, как эконочичность, быстродействие и высокое юзабилити.
Главная киллер-фича nlohmann - тщательно продуманные, настроенные,
готовые к употреблению из коробки, удобные средства сериализации/десериализации.

другие представленные либки не дотягивают)))

Цитата Сообщение от harryss Посмотреть сообщение
jsonCPP
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <jsoncpp/json/json.h> // or something
 
using namespace std;
 
int main() {
    // create the characters array
    Json::Value ch;
    ch[0]["name"] = "Jabberwock";
    ch[0]["chapter"] = 1;
    ch[1]["name"] = "Cheshire Cat";
    ch[1]["chapter"] = 6;
    ch[2]["name"] = "Mad Hatter";
    ch[2]["chapter"] = 7;
 
    // create the main object
    Json::Value val;
    val["book"] = "Alice in Wonderland";
    val["year"] = 1865;
    val["characters"] = ch;
 
    cout << val << '\n';
}
Цитата Сообщение от harryss Посмотреть сообщение
RapidJSON
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
// rapidjson/example/simpledom/simpledom.cpp`
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>
 
using namespace rapidjson;
 
int main() {
    // 1. Parse a JSON string into DOM.
    const char* json = "{\"project\":\"rapidjson\",\"stars\":10}";
    Document d;
    d.Parse(json);
 
    // 2. Modify it by DOM.
    Value& s = d["stars"];
    s.SetInt(s.GetInt() + 1);
 
    // 3. Stringify the DOM
    StringBuffer buffer;
    Writer<StringBuffer> writer(buffer);
    d.Accept(writer);
 
    // Output {"project":"rapidjson","stars":11}
    std::cout << buffer.GetString() << std::endl;
    return 0;
}
2
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 15
17.01.2019, 12:31  [ТС]
Большое спасибо, огромное!
0
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,517
17.01.2019, 12:42
Цитата Сообщение от harryss Посмотреть сообщение
json :: parse()
Не нужно.
Загрузка из файла осуществляется так:

C++
1
2
3
4
5
6
7
8
9
10
        std::ifstream src(filename);
        if(!src)
            throw std::runtime_error(
                "[load] can not open the file '" + filename + "'"
            );
 
        Json     jsn;
        src   >> jsn;
 
        // дальше работаем с jsn
Добавлено через 1 минуту
Цитата Сообщение от harryss Посмотреть сообщение
// Как работать с полученным gotten_obj далее?
C++
1
2
3
4
5
6
7
8
9
10
    const auto& settings = gotten_obj ["Settings"];
    
    const bool auto_reload 
        = settings.at("AutoReload").get<bool>();
    
    const bool checking_updates 
        = settings.at("CheckingUpdates").get<bool>();
 
    std::cout << "auto_reload = "      << auto_reload << '\n';
    std::cout << "checking_updates = " << checking_updates << '\n';
1
 Аватар для igorrr37
2869 / 2016 / 991
Регистрация: 21.12.2010
Сообщений: 3,721
Записей в блоге: 15
17.01.2019, 13:11
Цитата Сообщение от harryss Посмотреть сообщение
получить значение Settings -> AutoReload, получить значение Settings -> CheckingUpdates, но как это сделать?
через boost
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
#include <iostream>
#include <fstream>
#include <stdexcept>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
namespace bpt = boost::property_tree;
 
 
int main()
{
    try
    {
        std::ifstream ifs{"in.json"};
        if (!ifs.is_open())
        {
            throw std::runtime_error{"Unable to open file"};
        }
 
        bpt::ptree pt;
        bpt::read_json(ifs, pt);
        bool sar = pt.get<bool>("Settings.AutoReload");
        bool scu = pt.get<bool>("Settings.CheckingUpdates");
        std::cout << std::boolalpha << sar << '\n' << scu << std::endl;
 
    }
    catch (std::exception const& exc)
    {
        std::cerr << "Exception: " << exc.what() << std::endl;
    }
}
0
0 / 0 / 0
Регистрация: 06.01.2019
Сообщений: 15
17.01.2019, 17:04  [ТС]
eva2326,
Я тогда поспешил с написанием сообщения, разобрался, но за данный ответ все-равно большое спасибо.
Если есть возможность, то хочу задать еще один вопрос. Не отыскал в документации то, как изменять значение содержимого .JSON, переписывать.

Добавлено через 3 часа 33 минуты
Ребяты, по-прежнему нуждаюсь в помощи.
Разобраться в том, как изменять, перезаписывать значения самого .JSON файла.
0
2 / 2 / 3
Регистрация: 04.12.2015
Сообщений: 114
25.01.2019, 19:17
eva2326, Вы можете набросать небольшой ХелпМи для того, чтобы скомпилировать свой "nlohmann/json.hpp" из исходниов гитхаба?
У меня проблема, VS2015 апдейт1 отказывается работать с этим файлом выплевывая ошибку
Code
1
 error C2100: недопустимое косвенное обращение
Ошибка ссылкой идет в код
C++
1
2
3
4
5
6
// taken from ranges-v3
template<typename T>
struct static_const
{
    static constexpr T value{};
};
По видимому сборка только для релиса VS2017 или хотябы Апдейт3 на VS2015

Добавлено через 1 час 54 минуты
Не дождался ответ, рискнул, обновил VS2015 до апдейта 3, включить в проект json.hpp получилось.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.01.2019, 19:17
Помогаю со студенческими работами здесь

Чтение JSON-файла с помощью Newtonsoft.Json
И так, у нас есть JSon-файл вот такого типа: { &quot;objects&quot;: { &quot;minecraft/sounds/entity/rabbit/attack2.ogg&quot;: { ...

Чтение JSON - файла
Помогите считать данные с json'а. Есть файл с таким вот содержимым: { &quot;URLS&quot;: } Нужно считать с него эти ссылки и впихнуть в...

Чтение JSON файла
Здравствуйте! Только начал работать с json, нужна помощь знающих. Помогите пожалуйста с проблемой: Есть json-файл такого типа: { ...

Чтение из файла / json
Хелп, нужна помощь, не могу понять в чем проблема. if (radioButton3.Checked) { string path =...

Чтение JSON файла
Здравствуйте, имеется следующий по структуре JSON файл: { &quot;results&quot;: Прочитал несколько статей про десериализацию,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru