एक अपवाद है जब पढ़ने के मूल्यों का उपयोग कर BOOST_FOREACH से JSON सरणी C++में

0

सवाल

मैं हो रही हूँ नीचे त्रुटि को पढ़ने के लिए जब का उपयोग कर मूल्यों BOOST_FOREACH:

Unhandled exception at 0x76FCB502 in JSONSampleApp.exe: Microsoft C++ exception: boost::wrapexcept<boost::property_tree::ptree_bad_path> at memory location 0x00CFEB18.

मुझे किसी को पढ़ने के लिए कैसे से मानों की सरणी के साथ नीचे JSON प्रारूप?

#include <string>
#include <iostream>
#include <boost/property_tree/json_parser.hpp>
#include <boost/foreach.hpp>

using namespace std;

using boost::property_tree::ptree;

int main()
{
const char* f_strSetting = R"({"Class": [{"Student": {"Name":"John","Course":"C++"}}]})";

    boost::property_tree::ptree pt1;
    std::istringstream l_issJson(f_strSetting);
    boost::property_tree::read_json(l_issJson, pt1);

    BOOST_FOREACH(boost::property_tree::ptree::value_type & v, pt1.get_child("Class.Student"))
    {
        std::string l_strName;
        std::string l_strCourse;
        l_strName = v.second.get <std::string>("Name");
        l_strCourse = v.second.get <std::string>("Course");

        cout << l_strName << "\n";
        cout << l_strCourse << "\n";
    }

    return 0;
}
boost boost-propertytree c++ json
2021-11-23 13:32:29
1

सबसे अच्छा जवाब

1

आप से पूछा एक बहुत ही इसी तरह के सवाल कल. हम आप को दुरुपयोग करने के लिए नहीं एक संपत्ति के पेड़ के पुस्तकालय के लिए पार्स JSON. मैं भी प्रत्याशित:

के लिए और अधिक गंभीर कोड हो सकता है आप चाहते हैं का उपयोग करने के लिए प्रकार मानचित्रण

यहाँ है कैसे आप चाहते हैं का विस्तार से जवाब है कि पार्स करने के लिए पूरे सरणी में एक सदिश को एक बार में:

पर रहते हैं Coliru

#include <boost/json.hpp>
#include <boost/json/src.hpp> // for header-only
#include <iostream>
#include <string>
namespace json = boost::json;

struct Student {
    std::string name, course;

    friend Student tag_invoke(json::value_to_tag<Student>, json::value const& v) {
        std::cerr << "DEBUG: " << v << "\n";
        auto const& s = v.at("Student");
        return {
            value_to<std::string>(s.at("Name")),
            value_to<std::string>(s.at("Course")),
        };
    }
};

using Class = std::vector<Student>;

int main()
{
    auto doc = json::parse(R"({ "Class": [
            { "Student": { "Name": "John", "Course": "C++" } },
            { "Student": { "Name": "Carla", "Course": "Cobol" } }
        ]
    })");
    auto c = value_to<Class>(doc.at("Class"));

    for (Student const& s : c)
        std::cout << "Name: " << s.name << ", Course: " << s.course << "\n";
}

मुद्रण

Name: John, Course: C++
Name: Carla, Course: Cobol

मैं भी में फेंक दिया एक आसान डिबग लाइन के मामले में आप की जरूरत है मदद करने के लिए पता लगाना क्या वास्तव में आप कुछ बिंदु पर:

DEBUG: {"Student":{"Name":"John","Course":"C++"}}
DEBUG: {"Student":{"Name":"Carla","Course":"Cobol"}}
2021-11-23 15:05:58

मामले में आप पसंद करते हैं, मैनुअल JSON चंक्रमण के बिना संरचना/वेक्टर: coliru.stacked-crooked.com/a/af3ddd1dac30cbd5
sehe

हाय @sehe, मैं उपयोग कर रहा हूँ read_json के साथ property_tree. आप मदद कर सकते हैं कैसे करने के लिए मुझे मार्गदर्शन JSON चंक्रमण का उपयोग कर read_json और property_tree ( यह है के रूप में मेरे उदाहरण में).
sas

यकीन है. coliru.stacked-crooked.com/a/d444f8aaf6c611f5 (मूल रूप से उसी के रूप में यह था में मेरे पुराने के जवाब). यह मत करो, यद्यपि. और पर पढ़ने की सीमाओं "JSON" बैकएंड में बढ़ावा संपत्ति के पेड़: boost.org/doc/libs/1_77_0/doc/html/property_tree/...
sehe

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में