微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用RapidJSON读取JSON

如何解决使用RapidJSON读取JSON

使用RapidJSON,我可以通过以下方式读取本地json文件

std::ifstream ifs { R"(/home//am_v2.json)" };
IStreamWrapper isw { ifs };
Document doc {};
doc.ParseStream( isw );

但是,我想读取以下变量:

auto msg = mqttClient->consume_message();

内容msg->to.string()

显示

但是,我无法使用以下内容阅读此内容

std::ifstream ifs { msg }; 

有任何线索吗?

以下是更完整的代码

void MqttApplication::send()
{
    
    try {
        
        mqttClient->start_consuming();
        mqttClient->subscribe(TOPIC,QOS)->wait();        
    }
    catch (const mqtt::exception& exc) {
        cerr << exc.what() << endl;
        return;
    }
    
    while (true) {
        auto msg = mqttClient->consume_message();
        

        if (!msg) {
            if (!mqttClient->is_connected()) {
                cout << "MQTT: mqtt_application lost connection. Attempting reconnect" << endl;
                if (mqttTryReconnect(*mqttClient)) {
                    mqttClient->subscribe(TOPIC,QOS);
                    cout << "MQTT: mqtt_application reconnected" << endl;
                    continue;
                }
                else {
                    cout << "MQTT: mqtt_application reconnect Failed." << endl;
                }
            }
            else {
                cout << "MQTT: mqtt_application an error occurred retrieving messages." << endl;
            }
            break;
        }
        

        if (msg->get_topic() == "command" &&
                msg->to_string() == "exit") {
            cout << "Exit command received" << endl;
            break;
        }
        
        cout << msg->get_topic() << ": " << msg->to_string() << endl;
        Document doc;
        doc.Parse(msg->to.string());
    }
}

谢谢

解决方法

首先,请确保您

#define RAPIDJSON_HAS_STDSTRING 1

在添加Rapidjson标头之前。

解析来自mqtt的消息的内容非常简单:

Document doc;
doc.Parse(msg->to.string());

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。