aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2024-01-14 17:38:51 +0100
committerm-holger <m-holger@kubitscheck.org>2024-01-15 16:02:52 +0100
commita41b7899955a2bf54315fc2507f8e2f010ff271a (patch)
treef08a3068da9360cb30302e3624597bb679f8ead9
parent7315aa8c9b924c9351838ec5c1351a8c75e66bf1 (diff)
downloadqpdf-a41b7899955a2bf54315fc2507f8e2f010ff271a.tar.zst
Add new method JSON::getDictItem
-rw-r--r--include/qpdf/JSON.hh2
-rw-r--r--libqpdf/JSON.cc11
-rw-r--r--libtests/json.cc6
3 files changed, 19 insertions, 0 deletions
diff --git a/include/qpdf/JSON.hh b/include/qpdf/JSON.hh
index 81abe89c..e3c8a7dc 100644
--- a/include/qpdf/JSON.hh
+++ b/include/qpdf/JSON.hh
@@ -162,6 +162,8 @@ class JSON
QPDF_DLL
bool isNull() const;
QPDF_DLL
+ JSON getDictItem(std::string const& key) const;
+ QPDF_DLL
bool forEachDictItem(std::function<void(std::string const& key, JSON value)> fn) const;
QPDF_DLL
bool forEachArrayItem(std::function<void(JSON value)> fn) const;
diff --git a/libqpdf/JSON.cc b/libqpdf/JSON.cc
index f6401642..35b8fd76 100644
--- a/libqpdf/JSON.cc
+++ b/libqpdf/JSON.cc
@@ -410,6 +410,17 @@ JSON::isNull() const
return m->value->type_code == vt_null;
}
+JSON
+JSON::getDictItem(std::string const& key) const
+{
+ if (auto v = dynamic_cast<JSON_dictionary const*>(m->value.get())) {
+ if (auto it = v->members.find(key); it != v->members.end()) {
+ return it->second;
+ }
+ }
+ return makeNull();
+}
+
bool
JSON::forEachDictItem(std::function<void(std::string const& key, JSON value)> fn) const
{
diff --git a/libtests/json.cc b/libtests/json.cc
index 98e332e7..f265f6f6 100644
--- a/libtests/json.cc
+++ b/libtests/json.cc
@@ -78,6 +78,12 @@ test_main()
jmap.addDictionaryMember("empty_dict", JSON::makeDictionary());
jmap.addDictionaryMember("empty_list", JSON::makeArray());
jmap.addDictionaryMember("single", JSON::makeArray()).addArrayElement(JSON::makeInt(12));
+ std::string jm_str;
+ assert(jmap.getDictItem("b").getString(jm_str));
+ assert(!jmap.getDictItem("b2").getString(jm_str));
+ assert(!jstr2.getDictItem("b").getString(jm_str));
+ assert(jm_str == "a\tb");
+
check(
jmap,
"{\n"