# HG changeset patch # User Chris Cannam # Date 1497009971 -3600 # Node ID 9aca3267809cbc01dcb0f69cf3d790c55e30780f # Parent 02de5df3a884391aee20fd1def185aaded659c8a Various fixes to JSON writing for static output data diff -r 02de5df3a884 -r 9aca3267809c vamp-json/VampJson.h --- a/vamp-json/VampJson.h Thu Jun 08 16:17:03 2017 +0100 +++ b/vamp-json/VampJson.h Fri Jun 09 13:06:11 2017 +0100 @@ -603,11 +603,33 @@ json11::Json::object statinfo; auto souts = d.staticOutputInfo; - for (auto &s: souts) jo[s.first] = fromStaticOutputDescriptor(s.second); + for (auto &s: souts) { + statinfo[s.first] = fromStaticOutputDescriptor(s.second); + } + jo["staticOutputInfo"] = statinfo; return json11::Json(jo); } + static StaticOutputInfo + toStaticOutputInfo(json11::Json j, std::string &err) { + + if (j == json11::Json()) return {}; + + if (!j.is_object()) { + err = "object expected for static output info"; + return {}; + } + + StaticOutputInfo sinfo; + auto items = j.object_items(); + for (auto i: items) { + sinfo[i.first] = toStaticOutputDescriptor(i.second, err); + if (failed(err)) return {}; + } + return sinfo; + } + static PluginStaticData toPluginStaticData(json11::Json j, std::string &err) { @@ -658,6 +680,11 @@ err = "array expected for basicOutputInfo"; + } else if (!j["staticOutputInfo"].is_null() && + !j["staticOutputInfo"].is_object()) { + + err = "object expected for staticOutputInfo"; + } else { PluginStaticData psd; @@ -705,7 +732,12 @@ if (failed(err)) return {}; psd.basicOutputInfo.push_back(b); } - + + StaticOutputInfo sinfo = + toStaticOutputInfo(j["staticOutputInfo"], err); + if (failed(err)) return {}; + psd.staticOutputInfo = sinfo; + return psd; }