L'analyse de chaîne JSON avec jsoncpp
Je suis en train d'analyser une chaîne JSON codé en PHP et envoyé sur TCP pour une C++ client.
Mes chaînes JSON sont comme ceci:
{"1":{"name":"MIKE","surname":"TAYLOR"},"2":{"name":"TOM","surname":"JERRY"}}
Sur le C++ client, je suis en utilisant le jsoncpp bibliothèques:
void decode()
{
string text = {"1":{"name":"MIKE","surname":"TAYLOR"},"2":{"name":"TOM","surname":"JERRY"}};
Json::Value root;
Json::Reader reader;
bool parsingSuccessful = reader.parse( text, root );
if ( !parsingSuccessful )
{
cout << "Error parsing the string" << endl;
}
const Json::Value mynames = root["name"];
for ( int index = 0; index < mynames.size(); ++index )
{
cout << mynames[index] << endl;
}
}
Le problème est que je ne suis pas d'obtenir quoi que ce soit en tant que sortie, pas même l'erreur à propos de l'analyse(le cas échéant).
Pourriez-vous éventuellement m'aider à comprendre ce que je fais mal ?
- ce code ne sera même pas compiler. Tout d'abord vous devez vous échapper de votre chaîne json en C++ string. Si nécessaire pour les grandes chaînes, veuillez consulter lien la solution
- Vous avez absolument raison. Je suis de l'analyse d'un flux tcp, mais j'ai écrit une fonction avec une chaîne d'expliquer le code que j'ai écrit. J'ai oublié la séquence d'échappement. Merci pour la tête.
Vous devez vous connecter pour publier un commentaire.
Votre problème est: il n'y a pas de racine["nom"]. Votre document devrait ressembler à ceci:
Et votre code comme ceci:
Si vous souhaitez conserver vos données:
Traverse la racine de l'objet directement, en utilisant les itérateurs (ne pas le traiter comme s'il s'agissait d'un tableau.
Si Json::Reader ne fonctionne pas, essayez Json::CharReader à la place:
string text = R"json({"1":{"name":"MIKE","surname":"TAYLOR"}, "2":{"name":"TOM","surname":"JERRY"}})json";
Vous pouvez également lire à partir d'un stringstream: