鑒于此 yaml:
{CR: {cmd: fade, color: blue, panel: 0, value: 30, fout: 0.5, fint: 5},OL: {cmd: text, value: Blu at 30% on all, color: white, time: 5, position: [540,100], size: 50}}
使用此代碼:
bool SEMTools::decodeYaml(QString yaml)
{
try
{
YAML::Node root = YAML::Load(yaml.toStdString().c_str());
YAML::Node::iterator i;
for (i = root.begin(); i != root.end(); i )
{
qDebug() << (*i).first.as<QString>();
}
return true;
}
catch (YAML::TypedBadConversion<QString> const &e)
{
qDebug() << e.what();
}
return false;
}
我能夠檢索引導鍵:CR
和OL
。對于每一個,我還需要檢索整個物件:
CR: {cmd: fade, color: blue, panel: 0, value: 30, fout: 0.5, fint: 5}
和
OL: {cmd: text, value: Blu at 30% on all, color: white, time: 5, position: [540,100], size: 50}
我試過:
qDebug() << (*i).as<QString>();
但我的應用程式因此錯誤而崩潰:
terminate called after throwing an instance of 'YAML::InvalidNode'
what(): invalid node; this may result from using a map iterator as a sequence iterator, or vice-versa
獲取上述字串的正確語法是什么?
uj5u.com熱心網友回復:
(*i).first
是關鍵,(*i).second
是它的價值。
因此,(*i)
就是您所說的整個物件(鍵 值)。它根本不是一個字串,這就是為什么你不能通過.as<QString>()
. 每個鍵和值YAML::Node
就像root一樣,您.as<QString>()
只能對鍵進行操作,因為它是一個字串。在價值上,你可以做(*i).second["cmd"].as<QString>()
等。
如果您希望該值是字串而不是嵌套的 YAML 結構,則不應將其作為嵌套的 YAML 結構輸入。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/386424.html