Merge branch 'gitee-master' into gitlab-upstream

This commit is contained in:
zhengshuxin 2023-07-03 16:35:25 +08:00
commit 6610af52fd
3 changed files with 31 additions and 17 deletions

View File

@ -4,12 +4,10 @@
#include "../stdlib/json.hpp" #include "../stdlib/json.hpp"
#include <string> #include <string>
namespace acl namespace acl {
{
template<typename T> template<typename T>
bool deserialize(json& j, T& o, string* err = NULL) bool deserialize(json& j, T& o, string* err = NULL) {
{
if (!j.finish()) if (!j.finish())
{ {
if (err) if (err)
@ -30,12 +28,10 @@ bool deserialize(json& j, T& o, string* err = NULL)
} }
template<typename T> template<typename T>
void serialize(T& o, string& buf) void serialize(T& o, string& buf) {
{
json j; json j;
json_node& n = gson(j, o); json_node& n = gson(j, o);
(void) n.to_string(&buf); (void) n.to_string(&buf);
buf += "\r\n";
} }
} // namespace acl } // namespace acl

View File

@ -14,6 +14,8 @@ struct ACL_ITER;
* 使使 ACL * 使使 ACL
* json ACL json * json ACL json
* *
* json json dbuf ,
* json json .
*/ */
namespace acl { namespace acl {
@ -24,8 +26,7 @@ class json;
/** /**
* json json.create_node() * json json.create_node()
*/ */
class ACL_CPP_API json_node : public dbuf_obj class ACL_CPP_API json_node : public dbuf_obj {
{
public: public:
/** /**
* json * json
@ -436,8 +437,7 @@ private:
} node_val_; } node_val_;
}; };
class ACL_CPP_API json : public pipe_stream, public dbuf_obj class ACL_CPP_API json : public pipe_stream, public dbuf_obj {
{
public: public:
/** /**
* json json * json json
@ -520,8 +520,7 @@ public:
* clear/getElementsByTagName/getElementsByTags * clear/getElementsByTagName/getElementsByTags
* *
*/ */
const std::vector<json_node*>& const std::vector<json_node*>& getElementsByTagName(const char* tag) const;
getElementsByTagName(const char* tag) const;
/** /**
* json json * json json
@ -541,8 +540,7 @@ public:
* clear/getElementsByTagName/getElementsByTags * clear/getElementsByTagName/getElementsByTags
* *
*/ */
const std::vector<json_node*>& const std::vector<json_node*>& getElementsByTags(const char* tags) const;
getElementsByTags(const char* tags) const;
/** /**
* json json * json json
@ -714,6 +712,14 @@ public:
*/ */
json_node& create_node(const char* tag, json_node& node); json_node& create_node(const char* tag, json_node& node);
/**
* json json , ,
* 使 json .
* @param node {json_node*} json json
* , json dbuf .
*/
void remove(json_node* node);
///////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////
/** /**
@ -732,6 +738,8 @@ public:
*/ */
json_node& duplicate_node(const json_node& node); json_node& duplicate_node(const json_node& node);
/////////////////////////////////////////////////////////////////////
/** /**
* *
* @return {json_node&} * @return {json_node&}

View File

@ -690,6 +690,16 @@ json_node& json::create_node(const char* tag, json_node& node)
return *n; return *n;
} }
void json::remove(json_node* node)
{
if (node) {
ACL_JSON_NODE* n = node->get_json_node();
if (n) {
acl_json_node_delete(n);
}
}
}
json_node& json::duplicate_node(const json_node* node) json_node& json::duplicate_node(const json_node* node)
{ {
ACL_JSON_NODE* tmp = acl_json_node_duplicate(json_, ACL_JSON_NODE* tmp = acl_json_node_duplicate(json_,