web-dev-qa-db-fra.com

C ++: lecture d'un objet json à partir d'un fichier avec nlohmann json

J'utilise la bibliothèque json de nlohmann pour travailler avec des objets json en c ++. En fin de compte, je voudrais lire un objet json à partir d'un fichier, par exemple un objet simple comme celui-ci.

{
"happy": true,
"pi": 3.141
}

Je ne sais pas trop comment aborder cela. À https://github.com/nlohmann plusieurs façons sont données pour désérialiser à partir d'un littéral de chaîne, mais il ne semble pas trivial de l'étendre pour lire dans un fichier. Est-ce que quelqu'un a de l'expérience avec ça?

17
user3515814

Mise à jour 2017-07-03 pour JSON pour Modern C++ version 3

Depuis version 3.0 , json::json(std::ifstream&) est obsolète. On devrait utiliser json::parse() à la place:

std::ifstream ifs("test.json");
json jf = json::parse(ifs);

std::string str(R"({"json": "beta"})");
json js = json::parse(str);

Pour plus d'informations de base sur l'utilisation de la bibliothèque json de nlohmann, voir FAQ nlohmann .


Mise à jour pour JSON pour Modern C++ version 2

Depuis version 2.0 , json::operator>>() id deprecated . On devrait utiliser json::json() à la place:

std::ifstream ifs("{\"json\": true}");
json j(ifs);

Réponse originale pour JSON pour Modern C++ version 1

Utilisez json::operator>>(std::istream&):

json j;
std::ifstream ifs("{\"json\": true}");
ifs >> j;
27
YSC

Le constructeur json j(ifs) est obsolète et sera supprimé dans la version 3.0.0. Depuis la version 2.0.3, vous devez écrire:

std::ifstream ifs("test.json");
json j = json::parse(ifs);
8
Markus