diff --git a/bundle.json b/bundle.json index e80707c82fe8af9d23e8d659598542202d669afc..eb78c8cf7f0148b29ebc5fda126f7ca0c8360fc8 100644 --- a/bundle.json +++ b/bundle.json @@ -92,7 +92,7 @@ "app_file_service", "file_api", "openssl", - "json", + "cJSON", "dmsfwk", "data_object", "init" diff --git a/services/distributeddataservice/adapter/communicator/BUILD.gn b/services/distributeddataservice/adapter/communicator/BUILD.gn index 9cb388498e0dc04d1f294934ecc7b6b3dfdac3e0..c46ff0adeb97eaf816037996413691d059831021 100755 --- a/services/distributeddataservice/adapter/communicator/BUILD.gn +++ b/services/distributeddataservice/adapter/communicator/BUILD.gn @@ -64,7 +64,7 @@ ohos_source_set("distributeddata_communicator") { "dsoftbus:softbus_client", "hilog:libhilog", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", "kv_store:distributeddb", ] diff --git a/services/distributeddataservice/adapter/communicator/test/BUILD.gn b/services/distributeddataservice/adapter/communicator/test/BUILD.gn index a85976697641f91ed1b1c162af428da050e69c34..04663104d892bd0e1fbd90753593ea438877b377 100755 --- a/services/distributeddataservice/adapter/communicator/test/BUILD.gn +++ b/services/distributeddataservice/adapter/communicator/test/BUILD.gn @@ -215,7 +215,7 @@ ohos_unittest("SoftbusAdapterStandardTest") { "dsoftbus:softbus_client", "hilog:libhilog", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", "kv_store:distributeddata_inner", "kv_store:distributeddb", diff --git a/services/distributeddataservice/app/BUILD.gn b/services/distributeddataservice/app/BUILD.gn index 45849945d3d997f0c16d3f4abb0ed3df0738ccc9..85cd9d5bea2f20b0c3d8cf2a798d2ed653250e93 100644 --- a/services/distributeddataservice/app/BUILD.gn +++ b/services/distributeddataservice/app/BUILD.gn @@ -148,7 +148,7 @@ ohos_shared_library("distributeddataservice") { "hitrace:hitrace_meter", "hitrace:libhitracechain", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", "kv_store:distributeddata_mgr", "kv_store:distributeddb", diff --git a/services/distributeddataservice/app/test/BUILD.gn b/services/distributeddataservice/app/test/BUILD.gn index 4feefbd64ad7a21b508e3258e22f111e78696e40..dcf215b085a41dd853356bb9b4b0921b61f58d62 100644 --- a/services/distributeddataservice/app/test/BUILD.gn +++ b/services/distributeddataservice/app/test/BUILD.gn @@ -168,7 +168,7 @@ ohos_unittest("SessionManagerTest") { "hilog:libhilog", "hisysevent:libhisysevent", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:distributeddata_inner", "kv_store:distributeddata_mgr", "kv_store:distributeddb", @@ -242,7 +242,7 @@ ohos_unittest("KvStoreDataServiceClearTest") { "hitrace:hitrace_meter", "hitrace:libhitracechain", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:distributeddata_inner", "kv_store:distributeddata_mgr", "kv_store:distributeddb", diff --git a/services/distributeddataservice/app/test/fuzztest/dataservicestub_fuzzer/BUILD.gn b/services/distributeddataservice/app/test/fuzztest/dataservicestub_fuzzer/BUILD.gn index a04a1d620a19c27b38bf96374ceebea23cd0ea63..9b6021a105e9cbea8166e4a9453370e22def5ab3 100644 --- a/services/distributeddataservice/app/test/fuzztest/dataservicestub_fuzzer/BUILD.gn +++ b/services/distributeddataservice/app/test/fuzztest/dataservicestub_fuzzer/BUILD.gn @@ -47,7 +47,6 @@ ohos_fuzztest("DataServiceStubFuzzTest") { "${data_service_path}/adapter/include/utils", "${data_service_path}/adapter/include", "${device_manager_path}/interfaces/inner_kits/native_cpp/include", - "//third_party/json/single_include", "${data_service_path}/adapter/include/communicator", ] diff --git a/services/distributeddataservice/framework/BUILD.gn b/services/distributeddataservice/framework/BUILD.gn index 53b402127441eb41b1d812b7e95b8a5586ad9466..c5e430e82eadf561faae30b3efe8aece9843a9e4 100644 --- a/services/distributeddataservice/framework/BUILD.gn +++ b/services/distributeddataservice/framework/BUILD.gn @@ -138,7 +138,7 @@ ohos_shared_library("distributeddatasvcfwk") { "c_utils:utils", "common_event_service:cesfwk_innerkits", "hilog:libhilog", - "json:nlohmann_json_static", + "cJSON:cjson", "openssl:libcrypto_shared", ] subsystem_name = "distributeddatamgr" diff --git a/services/distributeddataservice/framework/include/cloud/subscription.h b/services/distributeddataservice/framework/include/cloud/subscription.h index 4054a91f30f71da07bb124da8a6611d5fb9f5308..29a8601c1374a807e2074b703abaf098fa03d78b 100644 --- a/services/distributeddataservice/framework/include/cloud/subscription.h +++ b/services/distributeddataservice/framework/include/cloud/subscription.h @@ -28,6 +28,9 @@ struct API_EXPORT Subscription final : public Serializable { std::map relations; bool Marshal(json &node) const override; bool Unmarshal(const json &node) override; + void SetRelations(Serializable::json &node, const std::map &values) { + Serializable::SetValue(node, values); + } }; bool Marshal(json &node) const; @@ -38,6 +41,9 @@ struct API_EXPORT Subscription final : public Serializable { static std::string GetKey(int32_t userId); static std::string GetRelationKey(int32_t userId, const std::string &bundleName); static std::string GetPrefix(const std::initializer_list &fields); + void SetSubscriptions(Serializable::json &node, const std::map &values) { + Serializable::SetValue(node, values); + } private: static constexpr const char *PREFIX = "CLOUD_SUBSCRIPTION"; diff --git a/services/distributeddataservice/framework/include/serializable/serializable.h b/services/distributeddataservice/framework/include/serializable/serializable.h index a0b6ad5a7c69514d7f2c405db3de745f5eaa0d76..df04dfa11b3578c97b757c7f894fd143020980bf 100644 --- a/services/distributeddataservice/framework/include/serializable/serializable.h +++ b/services/distributeddataservice/framework/include/serializable/serializable.h @@ -15,14 +15,16 @@ #ifndef OHOS_DISTRIBUTED_DATA_FRAMEWORKS_COMMON_SERIALIZABLE_H #define OHOS_DISTRIBUTED_DATA_FRAMEWORKS_COMMON_SERIALIZABLE_H +#include #include #include +#include #include "visibility.h" #ifndef JSON_NOEXCEPTION #define JSON_NOEXCEPTION #endif #include -#include +struct cJSON; namespace OHOS { namespace DistributedData { #ifndef GET_NAME @@ -30,9 +32,101 @@ namespace DistributedData { #endif struct Serializable { public: - using json = nlohmann::json; - using size_type = nlohmann::json::size_type; - using error_handler_t = nlohmann::detail::error_handler_t; + class iterator; + class JSONWrapper final{ + public: + friend iterator; + enum class Type : uint8_t { + ARRAY, + OBJECT, + }; + API_EXPORT JSONWrapper(); + API_EXPORT JSONWrapper(cJSON *json, cJSON *root, const std::string &key = ""); + API_EXPORT JSONWrapper(const std::string &jsonStr); + API_EXPORT JSONWrapper(JSONWrapper &&jsonWrapper); + + API_EXPORT operator std::string() const; + API_EXPORT bool operator==(int32_t value) const; + API_EXPORT bool operator==(const std::string &value) const; + + API_EXPORT JSONWrapper &operator=(JSONWrapper &&jsonWrapper); + API_EXPORT JSONWrapper &operator=(JSONWrapper::Type type); + API_EXPORT JSONWrapper &operator=(bool value); + API_EXPORT JSONWrapper &operator=(int32_t value); + API_EXPORT JSONWrapper &operator=(uint32_t value); + API_EXPORT JSONWrapper &operator=(int64_t value); + API_EXPORT JSONWrapper &operator=(uint64_t value); + API_EXPORT JSONWrapper &operator=(double value); + API_EXPORT JSONWrapper &operator=(const char *value); + API_EXPORT JSONWrapper &operator=(const std::string &value); + API_EXPORT JSONWrapper &operator=(const std::vector &value); + API_EXPORT JSONWrapper &operator[](const std::string &key); + API_EXPORT JSONWrapper &operator[](size_t index); + API_EXPORT JSONWrapper &operator[](size_t index) const; + + API_EXPORT bool is_null() const; + API_EXPORT bool is_boolean() const; + API_EXPORT bool is_number_integer() const; + API_EXPORT bool is_number_unsigned() const; + API_EXPORT bool is_number_float() const; + API_EXPORT bool is_string() const; + API_EXPORT bool is_array() const; + API_EXPORT bool is_object() const; + API_EXPORT bool is_discarded() const; + API_EXPORT bool get_to(bool &values) const; + API_EXPORT bool get_to(int16_t &values) const; + API_EXPORT bool get_to(uint16_t &values) const; + API_EXPORT bool get_to(int32_t &values) const; + API_EXPORT bool get_to(uint32_t &values) const; + API_EXPORT bool get_to(int64_t &values) const; + API_EXPORT bool get_to(uint64_t &values) const; + API_EXPORT bool get_to(double &values) const; + API_EXPORT bool get_to(std::string &values) const; + API_EXPORT bool get_to(std::vector &values) const; + API_EXPORT size_t size() const; + API_EXPORT std::string dump() const; + API_EXPORT iterator find(const std::string &key) const; + API_EXPORT iterator begin() const; + API_EXPORT iterator end() const; + API_EXPORT ~JSONWrapper(); + API_EXPORT static JSONWrapper parse(const std::string &str); + API_EXPORT static bool accept(const std::string &str); + + API_EXPORT static JSONWrapper array(); + API_EXPORT void push_back(const JSONWrapper &value); + API_EXPORT static std::string to_string(const JSONWrapper &jsonWrapper); + API_EXPORT bool operator==(const std::map& value) const; + API_EXPORT bool operator==(const std::map& value) const; + API_EXPORT bool operator==(const std::vector& value) const; + API_EXPORT bool empty() const; + API_EXPORT JSONWrapper& operator=(const std::map& value); + API_EXPORT JSONWrapper &operator=(const std::map& value); + API_EXPORT bool erase(const std::string& key); + API_EXPORT bool erase(int index); + private: + void AddToRoot(); + JSONWrapper(const JSONWrapper& jsonWrapper) = delete; + JSONWrapper &operator=(const JSONWrapper &jsonWrapper) = delete; + cJSON *json_ = nullptr; + cJSON *root_ = nullptr; + std::string key_; + bool needDel_ = false; + mutable std::vector> children_; + }; + class iterator { + public: + API_EXPORT iterator(std::vector>::iterator it); + API_EXPORT iterator &operator++(); + API_EXPORT bool operator==(const iterator &iter) const; + API_EXPORT bool operator!=(const iterator &iter) const; + API_EXPORT const JSONWrapper &operator*() const; + API_EXPORT std::string key() const; + API_EXPORT const JSONWrapper &value() const; + + private: + std::vector>::iterator node_; + }; + using json = JSONWrapper; API_EXPORT json Marshall() const; template @@ -40,7 +134,7 @@ public: { json root; SetValue(root, values); - return root.dump(-1, ' ', false, error_handler_t::replace); + return root.dump(); } API_EXPORT bool Unmarshall(const std::string &jsonStr); @@ -62,6 +156,7 @@ public: API_EXPORT static bool GetValue(const json &node, const std::string &name, bool &value); API_EXPORT static bool GetValue(const json &node, const std::string &name, std::vector &value); API_EXPORT static bool GetValue(const json &node, const std::string &name, Serializable &value); + API_EXPORT static bool GetValue(const json &node, const std::string &name, double &value); API_EXPORT static bool SetValue(json &node, const std::string &value); API_EXPORT static bool SetValue(json &node, const uint32_t &value); API_EXPORT static bool SetValue(json &node, const int32_t &value); @@ -128,8 +223,9 @@ bool Serializable::GetValue(const json &node, const std::string &name, std::vect return false; } bool result = true; - values.resize(subNode.size()); - for (size_type i = 0; i < subNode.size(); ++i) { + auto size = subNode.size(); + values.resize(size); + for (size_t i = 0; i < size; ++i) { result = GetValue(subNode[i], "", values[i]) && result; } return result; @@ -139,8 +235,8 @@ template bool Serializable::SetValue(json &node, const std::vector &values) { bool result = true; - size_type i = 0; - node = json::value_t::array; + size_t i = 0; + node = JSONWrapper::Type::ARRAY; for (const auto &value : values) { result = SetValue(node[i], value) && result; i++; @@ -166,7 +262,7 @@ template bool Serializable::SetValue(json &node, const std::map &values) { bool result = true; - node = json::value_t::object; + node = JSONWrapper::Type::OBJECT; for (const auto &[key, value] : values) { result = SetValue(node[key], value) && result; } diff --git a/services/distributeddataservice/framework/serializable/serializable.cpp b/services/distributeddataservice/framework/serializable/serializable.cpp index 253a9323403fe89dbe727a858cf54a18c7f7f6c8..0e19597486b6e423a5e05132f129bd13d67c4ab0 100644 --- a/services/distributeddataservice/framework/serializable/serializable.cpp +++ b/services/distributeddataservice/framework/serializable/serializable.cpp @@ -13,7 +13,11 @@ * limitations under the License. */ +#define LOG_TAG "serializable" +#include "log_print.h" #include "serializable/serializable.h" + +#include namespace OHOS { namespace DistributedData { Serializable::json Serializable::Marshall() const @@ -25,13 +29,13 @@ Serializable::json Serializable::Marshall() const bool Serializable::Unmarshall(const std::string &jsonStr) { - json jsonObj = json::parse(jsonStr, nullptr, false); + json jsonObj = json::parse(jsonStr); if (jsonObj.is_discarded()) { // if the string size is less than 1, means the string is invalid. if (jsonStr.empty()) { return false; } - jsonObj = json::parse(jsonStr.substr(1), nullptr, false); // drop first char to adapt A's value; + jsonObj = json::parse(jsonStr.substr(1)); // drop first char to adapt A's value; if (jsonObj.is_discarded()) { return false; } @@ -41,13 +45,13 @@ bool Serializable::Unmarshall(const std::string &jsonStr) Serializable::json Serializable::ToJson(const std::string &jsonStr) { - json jsonObj = json::parse(jsonStr, nullptr, false); + json jsonObj = json::parse(jsonStr); if (jsonObj.is_discarded()) { // if the string size is less than 1, means the string is invalid. if (jsonStr.empty()) { return {}; } - jsonObj = json::parse(jsonStr.substr(1), nullptr, false); // drop first char to adapt A's value; + jsonObj = json::parse(jsonStr.substr(1)); // drop first char to adapt A's value; if (jsonObj.is_discarded()) { return {}; } @@ -58,7 +62,7 @@ Serializable::json Serializable::ToJson(const std::string &jsonStr) bool Serializable::IsJson(const std::string &jsonStr) { if (!json::accept(jsonStr)) { - return json::accept(jsonStr.begin() + 1, jsonStr.end()); + return json::accept(jsonStr.substr(1)); } return true; } @@ -69,8 +73,7 @@ bool Serializable::GetValue(const json &node, const std::string &name, std::stri if (subNode.is_null() || !subNode.is_string()) { return false; } - value = subNode; - return true; + return subNode.get_to(value); } bool Serializable::GetValue(const json &node, const std::string &name, uint32_t &value) @@ -147,8 +150,8 @@ bool Serializable::GetValue(const json &node, const std::string &name, std::vect if (subNode.is_null() || !subNode.is_array()) { return false; } - value = std::vector(subNode); - return true; + + return subNode.get_to(value); } bool Serializable::GetValue(const json &node, const std::string &name, Serializable &value) @@ -160,6 +163,16 @@ bool Serializable::GetValue(const json &node, const std::string &name, Serializa return value.Unmarshal(subNode); } +bool Serializable::GetValue(const json &node, const std::string &name, double &value) +{ + auto &subNode = GetSubNode(node, name); + if (subNode.is_null() || !subNode.is_number_integer()) { + return false; + } + subNode.get_to(value); + return true; +} + bool Serializable::SetValue(json &node, const std::string &value) { node = value; @@ -215,7 +228,7 @@ bool Serializable::SetValue(json &node, const Serializable &value) const Serializable::json &Serializable::GetSubNode(const json &node, const std::string &name) { - static const json jsonNull = json::value_t::null; + static const json jsonNull; if (node.is_discarded() || node.is_null()) { return jsonNull; } @@ -230,5 +243,787 @@ const Serializable::json &Serializable::GetSubNode(const json &node, const std:: } return *it; } + +Serializable::JSONWrapper::JSONWrapper() : root_(nullptr) +{ + json_ = cJSON_CreateNull(); +} + +Serializable::JSONWrapper::JSONWrapper(cJSON *json, cJSON *root, const std::string &key) + : json_(json), root_(root), key_(key), needDel_(root == nullptr) +{ +} + +Serializable::JSONWrapper::JSONWrapper(const std::string &jsonStr) : root_(nullptr) +{ + json_ = cJSON_Parse(jsonStr.c_str()); +} + +Serializable::JSONWrapper::JSONWrapper(JSONWrapper &&jsonWrapper) +{ + if (root_ == nullptr) { + cJSON_Delete(json_); + json_ = nullptr; + } + json_ = std::move(jsonWrapper.json_); + jsonWrapper.json_ = nullptr; + root_ = jsonWrapper.root_; + jsonWrapper.root_ = nullptr; + key_ = std::move(jsonWrapper.key_); + children_ = std::move(jsonWrapper.children_); +} + +Serializable::JSONWrapper::operator std::string() const +{ + return dump(); +} + +Serializable::JSONWrapper &Serializable::JSONWrapper::operator=(JSONWrapper &&jsonWrapper) +{ + if (root_ == nullptr) { + cJSON_Delete(json_); + json_ = nullptr; + } + json_ = std::move(jsonWrapper.json_); + jsonWrapper.json_ = nullptr; + root_ = jsonWrapper.root_; + jsonWrapper.root_ = nullptr; + key_ = std::move(jsonWrapper.key_); + children_ = std::move(jsonWrapper.children_); + return *this; +} + +Serializable::JSONWrapper &Serializable::JSONWrapper::operator=(Serializable::JSONWrapper::Type type) +{ + if (json_ != nullptr) { + ZLOGE("cannot use operator[]"); + return *this; + } + switch (type) { + case Type::ARRAY: + json_ = cJSON_CreateArray(); + break; + case Type::OBJECT: + json_ = cJSON_CreateObject(); + } + if (json_ == nullptr || root_ == nullptr) { + return *this; + } + AddToRoot(); + return *this; +} + +Serializable::JSONWrapper &Serializable::JSONWrapper::operator=(bool value) +{ + if (root_ == nullptr && cJSON_IsNull(json_)) { + cJSON_Delete(json_); + json_ = nullptr; + } + if (json_ == nullptr) { + json_ = cJSON_CreateBool(value); + if (json_ == nullptr || root_ == nullptr) { + return *this; + } + AddToRoot(); + } + if (json_ == nullptr) { + return *this; + } + if (cJSON_IsBool(json_)) { + cJSON_SetBoolValue(json_, value); + return *this; + } + cJSON *node = cJSON_CreateBool(value); + if (node == nullptr) { + return *this; + } + if (root_ == nullptr) { + cJSON_Delete(json_); + json_ = node; + return *this; + } + bool success = false; + if (key_.empty()) { + success = cJSON_ReplaceItemViaPointer(root_, json_, node); + } else { + success = cJSON_ReplaceItemInObject(root_, key_.c_str(), node); + } + if (!success) { + cJSON_Delete(node); + node = nullptr; + return *this; + } + json_ = node; + node = nullptr; + return *this; +} + +Serializable::JSONWrapper &Serializable::JSONWrapper::operator=(int32_t value) +{ + if (root_ == nullptr && cJSON_IsNull(json_)) { + cJSON_Delete(json_); + json_ = nullptr; + } + if (json_ != nullptr) { + if (cJSON_IsNumber(json_)) { + cJSON_SetNumberValue(json_, value); + } + return *this; + } + json_ = cJSON_CreateNumber(value); + if (json_ == nullptr || root_ == nullptr) { + return *this; + } + AddToRoot(); + return *this; +} + +Serializable::JSONWrapper &Serializable::JSONWrapper::operator=(uint32_t value) +{ + int32_t number = static_cast(value); + return operator=(number); +} + +Serializable::JSONWrapper &Serializable::JSONWrapper::operator=(int64_t value) +{ + if (root_ == nullptr && cJSON_IsNull(json_)) { + cJSON_Delete(json_); + json_ = nullptr; + } + if (json_ != nullptr) { + if (cJSON_IsNumber(json_)) { + cJSON_SetNumberValue(json_, value); + //cJSON_SetInt64NumberValue(json_, value); + } + return *this; + } + json_ = cJSON_CreateNumber(value); + //json_ = cJSON_CreateInt64Number(value); + if (json_ == nullptr || root_ == nullptr) { + return *this; + } + AddToRoot(); + return *this; +} + +Serializable::JSONWrapper &Serializable::JSONWrapper::operator=(uint64_t value) +{ + int64_t number = static_cast(value); + return operator=(number); +} + +Serializable::JSONWrapper &Serializable::JSONWrapper::operator=(double value) +{ + if (root_ == nullptr && cJSON_IsNull(json_)) { + cJSON_Delete(json_); + json_ = nullptr; + } + if (json_ != nullptr) { + if (cJSON_IsNumber(json_)) { + cJSON_SetNumberValue(json_, value); + } + return *this; + } + json_ = cJSON_CreateNumber(value); + if (json_ == nullptr || root_ == nullptr) { + return *this; + } + AddToRoot(); + return *this; +} + +Serializable::JSONWrapper &Serializable::JSONWrapper::operator=(const char *value) +{ + if (root_ == nullptr && cJSON_IsNull(json_)) { + cJSON_Delete(json_); + json_ = nullptr; + } + + if (json_ == nullptr) { + json_ = cJSON_CreateString(value); + if (json_ == nullptr || root_ == nullptr) { + return *this; + } + AddToRoot(); + } + if (cJSON_IsString(json_)) { + cJSON_SetValuestring(json_, value); + return *this; + } + + cJSON *node = cJSON_CreateString(value); + if (node == nullptr) { + return *this; + } + if (root_ == nullptr) { + cJSON_Delete(json_); + json_ = node; + } else { + bool success = false; + if (key_.empty()) { + success = cJSON_ReplaceItemViaPointer(root_, json_, node); + } else { + success = cJSON_ReplaceItemInObject(root_, key_.c_str(), node); + } + + if (!success) { + cJSON_Delete(node); + node = nullptr; + return *this; + } + + json_ = node; + node = nullptr; + } + return *this; +} + +Serializable::JSONWrapper &Serializable::JSONWrapper::operator=(const std::string &value) +{ + return operator=(value.c_str()); +} + +Serializable::JSONWrapper &Serializable::JSONWrapper::operator=(const std::vector &value) +{ + if (root_ == nullptr && cJSON_IsNull(json_)) { + cJSON_Delete(json_); + json_ = nullptr; + } + if (json_ != nullptr) { + return *this; + } + json_ = cJSON_CreateArray(); + children_.clear(); + for (size_t i = 0; json_ && (i < value.size()); i++) { + auto node = cJSON_CreateNumber(value[i]); + if (!node || !cJSON_AddItemToArray(json_, node)) { + cJSON_Delete(json_); + json_ = nullptr; + children_.clear(); + return *this; + } + children_.push_back(std::make_shared(node, json_)); + } + if (json_ == nullptr || root_ == nullptr) { + return *this; + } + AddToRoot(); + return *this; +} + +Serializable::JSONWrapper &Serializable::JSONWrapper::operator[](const std::string &key) +{ + if (root_ == nullptr && cJSON_IsNull(json_)) { + cJSON_Delete(json_); + json_ = nullptr; + } + if (json_ == nullptr) { + json_ = cJSON_CreateObject(); + if (json_ != nullptr && root_ != nullptr) { + AddToRoot(); + } + } + if (!is_object()) { + ZLOGE("cannot use operator[]."); + //throw std::invalid_argument("cannot use operator[]"); + } + auto it = children_.begin(); + while (it != children_.end()) { + if ((*it)->key_ == key) { + return **it; + } + ++it; + } + auto item = cJSON_GetObjectItem(json_, key.c_str()); + auto res = std::make_shared(item, json_, key); + children_.push_back(res); + return *res; +} + +Serializable::JSONWrapper &Serializable::JSONWrapper::operator[](size_t index) +{ + if (root_ == nullptr && cJSON_IsNull(json_)) { + cJSON_Delete(json_); + json_ = nullptr; + } + if (json_ == nullptr) { + json_ = cJSON_CreateArray(); + if (json_ != nullptr && root_ != nullptr) { + AddToRoot(); + } + } + if (!is_array()) { + ZLOGE("cannot use operator[]."); + //throw std::invalid_argument("cannot use operator[]"); + } + int size = cJSON_GetArraySize(json_); + auto len = children_.size(); + while (len < size) { + auto item = cJSON_GetArrayItem(json_, len); + children_.push_back(std::make_shared(item, json_)); + len++; + } + if (index > len) { + ZLOGE("cannot use operator[]."); + //throw std::invalid_argument("cannot use operator[]"); + } + if (index == len) { + children_.push_back(std::make_shared(nullptr, json_)); + } + return *children_[index]; +} + +Serializable::JSONWrapper &Serializable::JSONWrapper::operator[](size_t index) const +{ + if (!is_array()) { + ZLOGE("invalid args."); + //throw std::invalid_argument("invalid args"); + } + int size = cJSON_GetArraySize(json_); + if (index >= size) { + ZLOGE("invalid args."); + //throw std::out_of_range("invalid args"); + } + auto len = children_.size(); + while (len < size) { + auto item = cJSON_GetArrayItem(json_, len); + children_.push_back(std::make_shared(item, json_)); + len++; + } + return *children_[index]; +} + +bool Serializable::JSONWrapper::is_null() const +{ + return cJSON_IsNull(json_); +} + +bool Serializable::JSONWrapper::is_boolean() const +{ + return cJSON_IsBool(json_); +} + +bool Serializable::JSONWrapper::is_number_integer() const +{ + return cJSON_IsNumber(json_); +} + +bool Serializable::JSONWrapper::is_number_unsigned() const +{ + return cJSON_IsNumber(json_) && cJSON_GetNumberValue(json_) >= 0; +} + +bool Serializable::JSONWrapper::is_number_float() const +{ + return cJSON_IsNumber(json_); +} + +bool Serializable::JSONWrapper::is_string() const +{ + return cJSON_IsString(json_); +} + +bool Serializable::JSONWrapper::is_array() const +{ + return cJSON_IsArray(json_); +} + +bool Serializable::JSONWrapper::is_object() const +{ + return cJSON_IsObject(json_); +} + +bool Serializable::JSONWrapper::is_discarded() const +{ + return json_ == nullptr; +} + +bool Serializable::JSONWrapper::accept(const std::string &str) +{ + return cJSON_Parse(str.c_str()) != nullptr; +} + +bool Serializable::JSONWrapper::get_to(bool &values) const +{ + if (json_ == nullptr || !is_boolean()) { + return false; + } + + values = cJSON_IsTrue(json_) ? true : false; + return true; +} + +bool Serializable::JSONWrapper::get_to(int16_t &values) const +{ + if (json_ == nullptr || !is_number_integer()) { + return false; + } + values = json_->valueint; + return true; +} + +bool Serializable::JSONWrapper::get_to(uint16_t &values) const +{ + if (json_ == nullptr || !is_number_unsigned()) { + return false; + } + values = json_->valueint; + return true; +} + +bool Serializable::JSONWrapper::get_to(int32_t &values) const +{ + if (json_ == nullptr || !is_number_integer()) { + return false; + } + values = json_->valueint; + return true; +} + +bool Serializable::JSONWrapper::get_to(uint32_t &values) const +{ + if (json_ == nullptr || !is_number_unsigned()) { + return false; + } + values = json_->valueint; + return true; +} + +bool Serializable::JSONWrapper::get_to(int64_t &values) const +{ + if (json_ == nullptr || !is_number_integer()) { + return false; + } + values = json_->valueint; + return true; +} + +bool Serializable::JSONWrapper::get_to(uint64_t &values) const +{ + if (json_ == nullptr || !is_number_unsigned()) { + return false; + } + values = json_->valueint; + return true; +} + +bool Serializable::JSONWrapper::get_to(double &values) const +{ + if (json_ == nullptr || !is_number_integer()) { + return false; + } + values = cJSON_GetNumberValue(json_); + return true; +} + +bool Serializable::JSONWrapper::get_to(std::string &values) const +{ + if (json_ == nullptr || !is_string()) { + return false; + } + values = cJSON_GetStringValue(json_); + return true; +} + +bool Serializable::JSONWrapper::get_to(std::vector &values) const +{ + if (json_ == nullptr || !is_array()) { + return false; + } + auto size = cJSON_GetArraySize(json_); + values.clear(); + values.reserve(size); + for (auto i = 0; i < size; i++) { + auto item = cJSON_GetArrayItem(json_, i); + if (item) { + values.push_back(cJSON_GetNumberValue(item)); + } + } + return true; +} + +bool Serializable::JSONWrapper::empty() const { + if (json_ == nullptr) { + return true; + } + if (cJSON_IsNull(json_)) { + return true; + } + if (cJSON_IsArray(json_)) { + return cJSON_GetArraySize(json_) == 0; + } + if (cJSON_IsObject(json_)) { + int size = 0; + cJSON *child = json_->child; + while (child) { + size++; + child = child->next; + } + return size == 0; + } + return false; +} + +size_t Serializable::JSONWrapper::size() const +{ + if (!cJSON_IsArray(json_) && !cJSON_IsObject(json_)) { + return 0; + } + return cJSON_GetArraySize(json_); +} + +std::string Serializable::JSONWrapper::dump() const +{ + if (json_ == nullptr) { + return ""; + } + return cJSON_PrintUnformatted(json_); +} + +Serializable::iterator Serializable::JSONWrapper::find(const std::string &key) const +{ + auto size = cJSON_GetArraySize(json_); + auto len = children_.size(); + if (len != size) { + children_.clear(); + for (int i = 0; i < size; i++) { + auto item = cJSON_GetArrayItem(json_, i); + children_.push_back(std::make_shared(item, json_, is_object() ? item->string:"")); + } + } + auto it = children_.begin(); + while (it != children_.end()) { + if ((*it)->key_ == key) { + return it; + } + ++it; + } + return it; +} + +Serializable::iterator Serializable::JSONWrapper::begin() const +{ + if (json_ == nullptr || (!is_array() && !is_object())) { + ZLOGE("not support."); + //throw std::logic_error("not support"); + } + auto size = cJSON_GetArraySize(json_); + auto len = children_.size(); + if (len != size) { + children_.clear(); + for (int i = 0; i < size; i++) { + auto item = cJSON_GetArrayItem(json_, i); + children_.push_back(std::make_shared(item, json_, is_object() ? item->string:"")); + } + } + return children_.begin(); +} + +Serializable::iterator Serializable::JSONWrapper::end() const +{ + if (json_ == nullptr || json_->child == nullptr || (!is_array() && !is_object())) { + ZLOGE("not support."); + //throw std::logic_error("not support"); + } + auto size = cJSON_GetArraySize(json_); + auto len = children_.size(); + if (len != size) { + children_.clear(); + for (int i = 0; i < size; i++) { + auto item = cJSON_GetArrayItem(json_, i); + children_.push_back(std::make_shared(item, json_, is_object() ? item->string:"")); + } + } + return children_.end(); +} + +Serializable::JSONWrapper::~JSONWrapper() +{ + if (needDel_ && root_ == nullptr && json_ != nullptr) { + cJSON_Delete(json_); + } +} + +Serializable::JSONWrapper Serializable::JSONWrapper::parse(const std::string &str) +{ + return Serializable::JSONWrapper(cJSON_Parse(str.c_str()), nullptr); +} + +bool Serializable::JSONWrapper::operator==(int32_t value) const +{ + return value == cJSON_GetNumberValue(json_); +} + +bool Serializable::JSONWrapper::operator==(const std::string &value) const +{ + return value == cJSON_GetStringValue(json_); +} + +void Serializable::JSONWrapper::AddToRoot() +{ + if (!key_.empty()) { + if (!cJSON_AddItemToObject(root_, key_.c_str(), json_)) { + cJSON_Delete(json_); + json_ = nullptr; + } + } else { + if (!cJSON_AddItemToArray(root_, json_)) { + cJSON_Delete(json_); + json_ = nullptr; + } + } +} + +Serializable::iterator::iterator(std::vector>::iterator it) : node_(it) {} + +Serializable::iterator &Serializable::iterator::operator++() +{ + node_++; + return *this; +} + +bool Serializable::iterator::operator==(const Serializable::iterator &iter) const +{ + return node_ == iter.node_; +} + +bool Serializable::iterator::operator!=(const Serializable::iterator &iter) const +{ + return !operator==(iter); +} + +const Serializable::JSONWrapper &Serializable::iterator::operator*() const +{ + return **node_; +} + +std::string Serializable::iterator::key() const +{ + return (*node_)->key_; +} + +const Serializable::JSONWrapper &Serializable::iterator::value() const +{ + return operator*(); +} + +Serializable::JSONWrapper Serializable::JSONWrapper::array() +{ + cJSON* json = cJSON_CreateArray(); + return Serializable::JSONWrapper(json, nullptr, ""); +} + +void Serializable::JSONWrapper::push_back(const JSONWrapper &value) +{ + if (is_array()) { + cJSON_AddItemToArray(json_, value.json_); + children_.push_back(std::make_shared(value.json_, json_)); + } +} + +std::string Serializable::JSONWrapper::to_string(const JSONWrapper &jsonWrapper) +{ + return jsonWrapper.dump(); +} + +bool Serializable::JSONWrapper::operator==(const std::map& value) const +{ + if (!is_object()) { + return false; + } + if (cJSON_GetArraySize(json_) != value.size()) { + return false; + } + for (const auto& pair : value) { + auto item = cJSON_GetObjectItem(json_, pair.first.c_str()); + if (item == nullptr || std::string(cJSON_GetStringValue(item)) != pair.second) { + return false; + } + } + return true; +} + +bool Serializable::JSONWrapper::operator==(const std::map& value) const +{ + if (!is_object()) { + return false; + } + if (cJSON_GetArraySize(json_) != value.size()) { + return false; + } + for (const auto& pair : value) { + auto item = cJSON_GetObjectItem(json_, pair.first.c_str()); + if (item == nullptr || cJSON_GetNumberValue(item) != pair.second) { + return false; + } + } + return true; +} + +bool Serializable::JSONWrapper::operator==(const std::vector& value) const +{ + if (!is_array()) { + return false; + } + if (cJSON_GetArraySize(json_) != value.size()) { + return false; + } + for (size_t i = 0; i < value.size(); ++i) { + auto item = cJSON_GetArrayItem(json_, i); + if (item == nullptr || std::string(cJSON_GetStringValue(item)) != value[i]) { + return false; + } + } + return true; +} + +Serializable::JSONWrapper& Serializable::JSONWrapper::operator=(const std::map& value) +{ + if (json_) { + cJSON_Delete(json_); + } + json_ = cJSON_CreateObject(); + for (const auto& pair : value) { + cJSON* num = cJSON_CreateNumber(pair.second); + cJSON_AddItemToObject(json_, pair.first.c_str(), num); + } + children_.clear(); + return *this; +} + +Serializable::JSONWrapper& Serializable::JSONWrapper::operator=(const std::map& value) +{ + if (json_) { + cJSON_Delete(json_); + } + json_ = cJSON_CreateObject(); + for (const auto& pair : value) { + cJSON* str = cJSON_CreateString(pair.second.c_str()); + cJSON_AddItemToObject(json_, pair.first.c_str(), str); + } + children_.clear(); + return *this; +} + +bool Serializable::JSONWrapper::erase(const std::string& key) +{ + if (!json_ || !is_object()) { + return false; + } + + cJSON_DeleteItemFromObject(json_, key.c_str()); + return true; +} + +bool Serializable::JSONWrapper::erase(int index) +{ + if (!json_ || !is_array()) { + return false; + } + + cJSON_DeleteItemFromArray(json_, index); + return true; +} + } // namespace DistributedData } // namespace OHOS diff --git a/services/distributeddataservice/framework/test/BUILD.gn b/services/distributeddataservice/framework/test/BUILD.gn index 4417c7c7a3a08a8a1290cb40426b9b65309162ad..4da523edca7cddc936b621aab9fe9b5962f9e510 100644 --- a/services/distributeddataservice/framework/test/BUILD.gn +++ b/services/distributeddataservice/framework/test/BUILD.gn @@ -121,7 +121,7 @@ ohos_unittest("ServiceUtilsTest") { "googletest:gtest_main", "hilog:libhilog", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", ] deps = [ "${data_service_path}/framework:distributeddatasvcfwk" ] @@ -199,7 +199,7 @@ ohos_unittest("CloudInfoTest") { deps = [ "${data_service_path}/framework:distributeddatasvcfwk" ] external_deps = [ - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", ] } @@ -225,7 +225,7 @@ ohos_unittest("SubscriptionTest") { configs = [ ":module_private_config" ] deps = [ "${data_service_path}/framework:distributeddatasvcfwk" ] external_deps = [ - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", ] } @@ -250,7 +250,7 @@ ohos_unittest("MetaDataManagerTest") { "googletest:gtest_main", "hilog:libhilog", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", ] deps = [ @@ -313,7 +313,7 @@ ohos_unittest("ServiceMetaDataTest") { "hitrace:hitrace_meter", "hitrace:libhitracechain", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:distributeddata_inner", "kv_store:distributeddata_mgr", "kv_store:distributeddb", diff --git a/services/distributeddataservice/framework/test/cloud_test.cpp b/services/distributeddataservice/framework/test/cloud_test.cpp index 5179ef0176e1ec1d57250cbd3ce39694cbc6680e..f5a22b8e20f06ea718dfb2d6caed05e950e93489 100644 --- a/services/distributeddataservice/framework/test/cloud_test.cpp +++ b/services/distributeddataservice/framework/test/cloud_test.cpp @@ -22,7 +22,6 @@ #include "cloud/cloud_info.h" #include "cloud/cloud_server.h" #include "cloud/schema_meta.h" -#include "nlohmann/json.hpp" #include "utils/crypto.h" #include "screen/screen_manager.h" #include "store/general_store.h" @@ -249,7 +248,7 @@ HWTEST_F(CloudInfoTest, CloudInfoTest001, TestSize.Level0) Serializable::json node1; cloudInfo1.Marshal(node1); - EXPECT_EQ(Serializable::Marshall(cloudInfo1), to_string(node1)); + EXPECT_EQ(Serializable::Marshall(cloudInfo1), Serializable::JSONWrapper::to_string(node1)); CloudInfo cloudInfo2; cloudInfo2.Unmarshal(node1); @@ -274,7 +273,7 @@ HWTEST_F(CloudInfoTest, AppInfoTest, TestSize.Level0) Serializable::json node1; cloudInfoAppInfo1.Marshal(node1); - EXPECT_EQ(Serializable::Marshall(cloudInfoAppInfo1), to_string(node1)); + EXPECT_EQ(Serializable::Marshall(cloudInfoAppInfo1), Serializable::JSONWrapper::to_string(node1)); CloudInfo::AppInfo cloudInfoAppInfo2; cloudInfoAppInfo2.Unmarshal(node1); @@ -304,7 +303,7 @@ HWTEST_F(CloudInfoTest, TableTest, TestSize.Level0) table1.fields.push_back(field1); Serializable::json node1; table1.Marshal(node1); - EXPECT_EQ(Serializable::Marshall(table1), to_string(node1)); + EXPECT_EQ(Serializable::Marshall(table1), Serializable::JSONWrapper::to_string(node1)); Table table2; table2.Unmarshal(node1); diff --git a/services/distributeddataservice/framework/test/meta_data_test.cpp b/services/distributeddataservice/framework/test/meta_data_test.cpp index 58359051ec6464c24a2a9c25a60d52f552f63bca..4ae6ed71edb528ed06e3009a4d5127bf15505202 100644 --- a/services/distributeddataservice/framework/test/meta_data_test.cpp +++ b/services/distributeddataservice/framework/test/meta_data_test.cpp @@ -35,7 +35,7 @@ #include "metadata/device_meta_data.h" #include "utils/constant.h" #include "gtest/gtest.h" -#include +#include "serializable/serializable.h" using namespace testing::ext; using namespace OHOS; using namespace OHOS::DistributedKv; @@ -736,7 +736,9 @@ HWTEST_F(ServiceMetaDataTest, UserMetaData, TestSize.Level1) Serializable::json node2; userStatus.Marshal(node2); - EXPECT_EQ(node2["isActive"], true); + bool ret; + node2["isActive"].get_to(ret); + EXPECT_EQ(ret, true); EXPECT_EQ(node2["id"], USER_ID2); UserStatus userUnmarshal; diff --git a/services/distributeddataservice/framework/test/serializable_test.cpp b/services/distributeddataservice/framework/test/serializable_test.cpp index 14a00bf91a0266ec90bec59962ead12d0fd43a31..4c8ece23471deae3b238b49fc788fc7d17fdbb5e 100644 --- a/services/distributeddataservice/framework/test/serializable_test.cpp +++ b/services/distributeddataservice/framework/test/serializable_test.cpp @@ -128,7 +128,7 @@ HWTEST_F(SerializableTest, GetNormalVal, TestSize.Level2) normal.value = -56; normal.isClear = true; normal.cols = {"adfasdfas"}; - auto jstr = to_string(normal.Marshall()); + auto jstr = Serializable::JSONWrapper::to_string(normal.Marshall()); Normal normal1; normal1.Unmarshall(jstr); ASSERT_TRUE(normal == normal1) << normal1.name; @@ -161,7 +161,7 @@ HWTEST_F(SerializableTest, GetMutilVal, TestSize.Level2) NormalEx normalEx; normalEx.normals = {Normal()}; normalEx.name = "normalEx"; - auto jstr = to_string(normalEx.Marshall()); + auto jstr = Serializable::JSONWrapper::to_string(normalEx.Marshall()); NormalEx normal1; normal1.Unmarshall(jstr); ASSERT_TRUE(normalEx == normal1) << normal1.name; @@ -296,7 +296,7 @@ HWTEST_F(SerializableTest, SetPointerValue, TestSize.Level2) in.value = new int64_t(-100); in.status = new uint32_t(110); in.isClear = new bool(true); - auto json = to_string(in.Marshall()); + auto json = Serializable::JSONWrapper::to_string(in.Marshall()); Test out; out.Unmarshall(json); ASSERT_TRUE(in == out) << in.count; diff --git a/services/distributeddataservice/framework/test/subscription_test.cpp b/services/distributeddataservice/framework/test/subscription_test.cpp index 00cffdd43106a7163cc5c1d77645e1182325a9b7..2b70c8a07671d8e982cb4c3e7eb7f56c8d92b493 100644 --- a/services/distributeddataservice/framework/test/subscription_test.cpp +++ b/services/distributeddataservice/framework/test/subscription_test.cpp @@ -58,8 +58,8 @@ HWTEST_F(SubscriptionTest, RelationUnmarshal, TestSize.Level1) Subscription::json node; node["id"] = "testId"; node["bundleName"] = "testBundleName"; - node["relations"] = testRelation; Subscription::Relation relation; + relation.SetRelations(node["relations"], testRelation); relation.Unmarshal(node); ASSERT_EQ(relation.id, "testId"); ASSERT_EQ(relation.bundleName, "testBundleName"); @@ -94,8 +94,8 @@ HWTEST_F(SubscriptionTest, Unmarshal, TestSize.Level1) Subscription::json node; node["userId"] = 100; node["id"] = "testId"; - node["expiresTime"] = testExpiresTime; Subscription subscription; + subscription.SetSubscriptions(node["expiresTime"], testExpiresTime); subscription.Unmarshal(node); ASSERT_EQ(subscription.userId, 100); ASSERT_EQ(subscription.id, "testId"); diff --git a/services/distributeddataservice/rust/extension/BUILD.gn b/services/distributeddataservice/rust/extension/BUILD.gn index d1c0fdc1d9dcba25c6c8102985f7961a48a950df..1bd6a4d644d1d621285e8e37f91645679175f46f 100644 --- a/services/distributeddataservice/rust/extension/BUILD.gn +++ b/services/distributeddataservice/rust/extension/BUILD.gn @@ -61,7 +61,7 @@ ohos_shared_library("opencloudextension") { external_deps = [ "access_token:libaccesstoken_sdk", "hilog:libhilog", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", ] subsystem_name = "distributeddatamgr" diff --git a/services/distributeddataservice/service/backup/BUILD.gn b/services/distributeddataservice/service/backup/BUILD.gn index 6b90fa32f6bf3ff3d0ff493c0b4b8409e118a42a..d0e21358ce7d9eac69c4bfea85ed7fd734a12402 100755 --- a/services/distributeddataservice/service/backup/BUILD.gn +++ b/services/distributeddataservice/service/backup/BUILD.gn @@ -56,7 +56,7 @@ ohos_source_set("distributeddata_backup") { external_deps = [ "device_manager:devicemanagersdk", "hilog:libhilog", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", ] subsystem_name = "distributeddatamgr" diff --git a/services/distributeddataservice/service/bootstrap/BUILD.gn b/services/distributeddataservice/service/bootstrap/BUILD.gn index ff48eaecef9718f2b318e3a2ba349707e54b67a8..0f6d8f04d0b6b81a4bd0a05ea5af5deb5a8478ed 100644 --- a/services/distributeddataservice/service/bootstrap/BUILD.gn +++ b/services/distributeddataservice/service/bootstrap/BUILD.gn @@ -54,7 +54,7 @@ ohos_source_set("distributeddata_bootstrap") { external_deps = [ "hilog:libhilog", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", ] subsystem_name = "distributeddatamgr" diff --git a/services/distributeddataservice/service/cloud/BUILD.gn b/services/distributeddataservice/service/cloud/BUILD.gn index b36909c07967979acfa47d36caaf246362aaaa40..92a49cb1e6b4b95b98d6229096270b817d438439 100755 --- a/services/distributeddataservice/service/cloud/BUILD.gn +++ b/services/distributeddataservice/service/cloud/BUILD.gn @@ -70,7 +70,7 @@ ohos_source_set("distributeddata_cloud") { "access_token:libtokenid_sdk", "device_manager:devicemanagersdk", "hicollie:libhicollie", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", "kv_store:distributeddb", "relational_store:cloud_data_inner", diff --git a/services/distributeddataservice/service/config/BUILD.gn b/services/distributeddataservice/service/config/BUILD.gn index b5d6368020292f8baef84a9fa95b80bfbe859348..ed9bd009e2f94dfd31c6741db7ac6fcfa2721d6e 100644 --- a/services/distributeddataservice/service/config/BUILD.gn +++ b/services/distributeddataservice/service/config/BUILD.gn @@ -59,7 +59,7 @@ ohos_source_set("distributeddata_config") { deps = [ "${data_service_path}/framework:distributeddatasvcfwk" ] external_deps = [ "hilog:libhilog", - "json:nlohmann_json_static", + "cJSON:cjson", ] subsystem_name = "distributeddatamgr" part_name = "datamgr_service" diff --git a/services/distributeddataservice/service/config/src/model/component_config.cpp b/services/distributeddataservice/service/config/src/model/component_config.cpp index 3810ece2b4aed787c2eb96a8e875560d5fb9eb9b..9195e7dc8b51630baa716d3a426bf865bc3ce6bc 100644 --- a/services/distributeddataservice/service/config/src/model/component_config.cpp +++ b/services/distributeddataservice/service/config/src/model/component_config.cpp @@ -36,7 +36,7 @@ bool ComponentConfig::Unmarshal(const json &node) GetValue(node, GET_NAME(destructor), destructor); const auto &subNode = GetSubNode(node, GET_NAME(params)); if (!subNode.is_null()) { - params = to_string(subNode); + params = Serializable::JSONWrapper::to_string(subNode); } return true; } diff --git a/services/distributeddataservice/service/data_share/BUILD.gn b/services/distributeddataservice/service/data_share/BUILD.gn index 8bc36903c6e47bf6aadf24dfe0103e78c479b115..0709cc267ccb89a4100fc8db231452f5b8b1e3ed 100644 --- a/services/distributeddataservice/service/data_share/BUILD.gn +++ b/services/distributeddataservice/service/data_share/BUILD.gn @@ -129,7 +129,7 @@ ohos_source_set("data_share_service") { "hisysevent:libhisysevent", "init:libbegetutil", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", "kv_store:distributeddb", "qos_manager:concurrent_task_client", diff --git a/services/distributeddataservice/service/dumper/BUILD.gn b/services/distributeddataservice/service/dumper/BUILD.gn index 72b194d7931caefdcea75bf011235bf903cb219b..813707ad59aaa0b8755342e59b57b0ccb7c19934 100644 --- a/services/distributeddataservice/service/dumper/BUILD.gn +++ b/services/distributeddataservice/service/dumper/BUILD.gn @@ -42,7 +42,7 @@ ohos_source_set("distributeddata_dumper") { deps = [ "${data_service_path}/framework:distributeddatasvcfwk" ] external_deps = [ "hilog:libhilog", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", "kv_store:distributeddb", ] diff --git a/services/distributeddataservice/service/kvdb/BUILD.gn b/services/distributeddataservice/service/kvdb/BUILD.gn index 874dc361c3edfbe0a3cd345c7f8e1cf6998d0af9..011ace89b128abb1543f5ef80102510e4fea1472 100644 --- a/services/distributeddataservice/service/kvdb/BUILD.gn +++ b/services/distributeddataservice/service/kvdb/BUILD.gn @@ -78,7 +78,7 @@ ohos_source_set("distributeddata_kvdb") { "hilog:libhilog", "hisysevent:libhisysevent", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", "kv_store:distributeddb", "kv_store:kvdb_inner_lite", diff --git a/services/distributeddataservice/service/matrix/BUILD.gn b/services/distributeddataservice/service/matrix/BUILD.gn index e7f2d0a63e72bd920b4bb9f7a951a32375354ce9..fc0110efb7aa34cb1adb0826441a2fd8baddcbb1 100755 --- a/services/distributeddataservice/service/matrix/BUILD.gn +++ b/services/distributeddataservice/service/matrix/BUILD.gn @@ -58,7 +58,7 @@ ohos_source_set("distributeddata_matrix") { external_deps = [ "device_manager:devicemanagersdk", "hilog:libhilog", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", ] subsystem_name = "distributeddatamgr" diff --git a/services/distributeddataservice/service/permission/BUILD.gn b/services/distributeddataservice/service/permission/BUILD.gn index 2795bda98f789384e7e03b76cde5469544eaae2b..3eba0a70fafc41495771bd42db04df8beff38cc2 100644 --- a/services/distributeddataservice/service/permission/BUILD.gn +++ b/services/distributeddataservice/service/permission/BUILD.gn @@ -62,7 +62,7 @@ ohos_source_set("distributeddata_permit") { "device_auth:deviceauth_sdk", "device_manager:devicemanagersdk", "hilog:libhilog", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", "kv_store:distributeddb", ] diff --git a/services/distributeddataservice/service/test/BUILD.gn b/services/distributeddataservice/service/test/BUILD.gn index 8c92d75f5b7e1f385c4daf1f6d084c04f892a1db..c60dcf93463b0b10fd1958925de0abe6b9c63a3a 100644 --- a/services/distributeddataservice/service/test/BUILD.gn +++ b/services/distributeddataservice/service/test/BUILD.gn @@ -441,7 +441,7 @@ ohos_unittest("KVDBGeneralStoreAbnormalTest") { "googletest:gtest_main", "hilog:libhilog", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:distributeddata_inner", "kv_store:distributeddb", "relational_store:native_rdb", @@ -648,7 +648,7 @@ ohos_unittest("ObjectAssetLoaderTest") { "hilog:libhilog", "hisysevent:libhisysevent", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:distributeddata_inner", ] @@ -687,7 +687,7 @@ ohos_unittest("ObjectAssetMachineTest") { "hilog:libhilog", "hisysevent:libhisysevent", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:distributeddata_inner", ] @@ -784,7 +784,7 @@ ohos_unittest("ObjectManagerTest") { "hilog:libhilog", "hisysevent:libhisysevent", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:distributeddata_inner", "kv_store:distributeddata_mgr", "kv_store:distributeddb", @@ -827,7 +827,7 @@ ohos_unittest("ObjectSnapshotTest") { "hilog:libhilog", "hisysevent:libhisysevent", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:distributeddata_inner", ] @@ -872,7 +872,7 @@ ohos_unittest("MetaDataTest") { "hilog:libhilog", "hisysevent:libhisysevent", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:distributeddata_inner", "kv_store:distributeddb", ] @@ -952,7 +952,6 @@ ohos_unittest("DataShareServiceImplTest") { "${datashare_path}/frameworks/native/common/include", "${datashare_path}/interfaces/inner_api/common/include", "${datashare_path}/interfaces/inner_api/consumer/include", - "//third_party/json/single_include", ] sources = [ @@ -1050,7 +1049,7 @@ ohos_unittest("DataShareServiceImplTest") { "huks:libhukssdk", "init:libbegetutil", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:distributeddata_inner", "kv_store:distributeddb", "kv_store:distributeddb", @@ -1200,7 +1199,7 @@ ohos_unittest("UdmfServiceImplTest") { "device_manager:devicemanagersdk", "googletest:gtest_main", "hilog:libhilog", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:distributeddata_inner", "kv_store:distributeddb", "relational_store:native_rdb", @@ -1569,7 +1568,7 @@ ohos_unittest("PermitDelegateMockTest") { "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:distributeddata_inner", "kv_store:distributeddb", ] @@ -1670,7 +1669,7 @@ ohos_unittest("QueryHelperUnitTest") { "hilog:libhilog", "hisysevent:libhisysevent", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", "kv_store:distributeddb", "kv_store:kvdb_inner_lite", @@ -1700,7 +1699,7 @@ ohos_unittest("AuthDelegateMockTest") { "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:distributeddata_inner", ] @@ -1751,7 +1750,7 @@ ohos_unittest("UpgradeMockTest") { "googletest:gtest_main", "hilog:libhilog", "huks:libhukssdk", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", "kv_store:distributeddb", ] @@ -1799,7 +1798,7 @@ ohos_unittest("UserDelegateMockTest") { "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:datamgr_common", "kv_store:distributeddb", ] diff --git a/services/distributeddataservice/service/test/data_share_profile_config_test.cpp b/services/distributeddataservice/service/test/data_share_profile_config_test.cpp index 55f5a31b96f00229cfe73a7411977b46722446fd..c7d227241a1a4f552470d0dda27f408b140d432c 100644 --- a/services/distributeddataservice/service/test/data_share_profile_config_test.cpp +++ b/services/distributeddataservice/service/test/data_share_profile_config_test.cpp @@ -113,7 +113,9 @@ HWTEST_F(DataShareProfileConfigTest, ProfileInfo001, TestSize.Level1) Serializable::json node; info.Marshal(node); - EXPECT_EQ(node["isSilentProxyEnable"], true); + bool ret; + node["isSilentProxyEnable"].get_to(ret); + EXPECT_EQ(ret, true); EXPECT_EQ(node["path"], "storeName/tableName"); EXPECT_EQ(node["scope"], "module"); EXPECT_EQ(node["type"], "rdb"); diff --git a/services/distributeddataservice/service/test/fuzztest/datashareservicestub_fuzzer/BUILD.gn b/services/distributeddataservice/service/test/fuzztest/datashareservicestub_fuzzer/BUILD.gn index dfb20f04e232c9d0a260fd140a2be847a4a0d2e0..d5f5b9190ac1731537d61e883e60262d8adf575c 100644 --- a/services/distributeddataservice/service/test/fuzztest/datashareservicestub_fuzzer/BUILD.gn +++ b/services/distributeddataservice/service/test/fuzztest/datashareservicestub_fuzzer/BUILD.gn @@ -37,7 +37,6 @@ ohos_fuzztest("DataShareServiceStubFuzzTest") { "${datashare_path}/frameworks/native/common/include", "${datashare_path}/interfaces/inner_api/common/include", "${datashare_path}/interfaces/inner_api/consumer/include", - "//third_party/json/single_include", "${data_service_path}/adapter/include/communicator", ] diff --git a/services/distributeddataservice/service/test/fuzztest/dumphelper_fuzzer/BUILD.gn b/services/distributeddataservice/service/test/fuzztest/dumphelper_fuzzer/BUILD.gn index 2fd165553fc82a02c25e2bec66fe165409078770..81422a3a92ecfa8ecc38b362d260d6bb54eda3e7 100644 --- a/services/distributeddataservice/service/test/fuzztest/dumphelper_fuzzer/BUILD.gn +++ b/services/distributeddataservice/service/test/fuzztest/dumphelper_fuzzer/BUILD.gn @@ -33,7 +33,6 @@ ohos_fuzztest("DumpHelperFuzzTest") { "${relational_store_path}/interfaces/inner_api/cloud_data/include", "${relational_store_path}/interfaces/inner_api/rdb/include", "${relational_store_path}/interfaces/inner_api/common_type/include", - "//third_party/json/single_include", ] fuzz_config_file = diff --git a/services/distributeddataservice/service/test/fuzztest/kvdbservicestub_fuzzer/BUILD.gn b/services/distributeddataservice/service/test/fuzztest/kvdbservicestub_fuzzer/BUILD.gn index 87efa4b39748655714529db3064e91d4c3811773..e817fcadfeaf511afb9cdcd88a246b0a8fcf995b 100644 --- a/services/distributeddataservice/service/test/fuzztest/kvdbservicestub_fuzzer/BUILD.gn +++ b/services/distributeddataservice/service/test/fuzztest/kvdbservicestub_fuzzer/BUILD.gn @@ -42,7 +42,6 @@ ohos_fuzztest("KvdbServiceStubFuzzTest") { "${kv_store_distributeddb_path}/interfaces/include/", "${kv_store_distributeddb_path}/interfaces/include/relational", "${relational_store_path}/interfaces/inner_api/common_type/include", - "//third_party/json/single_include", "${data_service_path}/adapter/include/communicator", "${data_service_path}/adapter/include/utils", ] diff --git a/services/distributeddataservice/service/test/fuzztest/objectservicestub_fuzzer/BUILD.gn b/services/distributeddataservice/service/test/fuzztest/objectservicestub_fuzzer/BUILD.gn index e3d93e45b12bc78a313eddf3fe9dc341d70375f3..95fc9ae4ccd4f77de122d971bf607622ab408dab 100755 --- a/services/distributeddataservice/service/test/fuzztest/objectservicestub_fuzzer/BUILD.gn +++ b/services/distributeddataservice/service/test/fuzztest/objectservicestub_fuzzer/BUILD.gn @@ -41,7 +41,6 @@ ohos_fuzztest("ObjectServiceStubFuzzTest") { "${dataobject_path}/frameworks/innerkitsimpl/include", "${dataobject_path}/frameworks/innerkitsimpl/include/common", "${dataobject_path}/interfaces/innerkits", - "//third_party/json/single_include", "${relational_store_path}/interfaces/inner_api/common_type/include", "${data_service_path}/adapter/include/communicator", "${data_service_path}/adapter/include/utils", @@ -115,7 +114,7 @@ ohos_fuzztest("ObjectServiceStubFuzzTest") { "hisysevent:libhisysevent", "huks:libhukssdk", "ipc:ipc_core", - "json:nlohmann_json_static", + "cJSON:cjson", "kv_store:distributeddata_inner", "kv_store:distributeddata_mgr", ] diff --git a/services/distributeddataservice/service/test/fuzztest/rdbresultsetstub_fuzzer/BUILD.gn b/services/distributeddataservice/service/test/fuzztest/rdbresultsetstub_fuzzer/BUILD.gn index 984eddf37dd2aad45543a029a8ed40df530a584d..a2c80dcfd7c18351da6a1afe368a365f5d31ad87 100644 --- a/services/distributeddataservice/service/test/fuzztest/rdbresultsetstub_fuzzer/BUILD.gn +++ b/services/distributeddataservice/service/test/fuzztest/rdbresultsetstub_fuzzer/BUILD.gn @@ -36,7 +36,6 @@ ohos_fuzztest("RdbResultSetStubFuzzTest") { "${relational_store_path}/interfaces/inner_api/cloud_data/include", "${relational_store_path}/interfaces/inner_api/rdb/include", "${relational_store_path}/interfaces/inner_api/common_type/include", - "//third_party/json/single_include", ] fuzz_config_file = diff --git a/services/distributeddataservice/service/test/fuzztest/rdbservicestub_fuzzer/BUILD.gn b/services/distributeddataservice/service/test/fuzztest/rdbservicestub_fuzzer/BUILD.gn index d8f90d8320d4f05b161aad8fa1cee0e0af049493..429fc9995161cf8aa94418be275eb019aa10095b 100644 --- a/services/distributeddataservice/service/test/fuzztest/rdbservicestub_fuzzer/BUILD.gn +++ b/services/distributeddataservice/service/test/fuzztest/rdbservicestub_fuzzer/BUILD.gn @@ -47,7 +47,6 @@ ohos_fuzztest("RdbServiceStubFuzzTest") { "${relational_store_path}/interfaces/inner_api/cloud_data/include", "${relational_store_path}/interfaces/inner_api/rdb/include", "${relational_store_path}/interfaces/inner_api/common_type/include", - "//third_party/json/single_include", "${data_service_path}/adapter/include/communicator", ]