mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-11-30 10:57:34 +08:00
optimize json module
This commit is contained in:
parent
c4993fd694
commit
9b835c8e8a
@ -287,6 +287,22 @@ void acl_json_building(ACL_JSON *json, size_t length,
|
||||
ACL_ITER iter;
|
||||
ACL_JSON_NODE *node, *prev;
|
||||
ACL_VSTRING *buf = acl_vstring_alloc(256);
|
||||
ACL_RING *ring_ptr = acl_ring_succ(&json->root->children);
|
||||
|
||||
/* 为了兼容历史的BUG,所以此处只能如此处理了--zsx, 2021.3.27 */
|
||||
|
||||
if (ring_ptr == &json->root->children) {
|
||||
if (json->root->left_ch == 0) {
|
||||
json->root->left_ch = '{';
|
||||
json->root->right_ch = '}';
|
||||
}
|
||||
} else {
|
||||
node = acl_ring_to_appl(ring_ptr, ACL_JSON_NODE, node);
|
||||
if (node->left_ch == 0 && json->root->left_ch == 0) {
|
||||
json->root->left_ch = '{';
|
||||
json->root->right_ch = '}';
|
||||
}
|
||||
}
|
||||
|
||||
if (json->root->left_ch > 0)
|
||||
ACL_VSTRING_ADDCH(buf, json->root->left_ch);
|
||||
@ -438,14 +454,9 @@ ACL_VSTRING *acl_json_build(ACL_JSON *json, ACL_VSTRING *buf)
|
||||
json->root->left_ch = '{';
|
||||
json->root->right_ch = '}';
|
||||
}
|
||||
} else if (json->root->type != ACL_JSON_T_ARRAY) {
|
||||
} else {
|
||||
node = acl_ring_to_appl(ring_ptr, ACL_JSON_NODE, node);
|
||||
if (node != NULL && node->type == ACL_JSON_T_ARRAY
|
||||
&& acl_ring_size(&json->root->children) == 1) {
|
||||
|
||||
json->root->left_ch = 0;
|
||||
json->root->right_ch = 0;
|
||||
} else {
|
||||
if (node->left_ch == 0 && json->root->left_ch == 0) {
|
||||
json->root->left_ch = '{';
|
||||
json->root->right_ch = '}';
|
||||
}
|
||||
|
3
lib_acl_cpp/samples/json/json14/Makefile
Normal file
3
lib_acl_cpp/samples/json/json14/Makefile
Normal file
@ -0,0 +1,3 @@
|
||||
base_path = ../../..
|
||||
PROG = json
|
||||
include ../../Makefile.in
|
74
lib_acl_cpp/samples/json/json14/json.cpp
Normal file
74
lib_acl_cpp/samples/json/json14/json.cpp
Normal file
@ -0,0 +1,74 @@
|
||||
#include "stdafx.h"
|
||||
#include <getopt.h>
|
||||
|
||||
static void usage(const char* procname) {
|
||||
printf("usage: %s -h [help[ -f json_file\r\n", procname);
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
acl::string file;
|
||||
int ch;
|
||||
|
||||
while ((ch = getopt(argc, argv, "hf:")) > 0) {
|
||||
switch (ch) {
|
||||
case 'h':
|
||||
usage(argv[0]);
|
||||
return 0;
|
||||
case 'f':
|
||||
file = optarg;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (file.empty()) {
|
||||
usage(argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
acl::string buf;
|
||||
if (!acl::ifstream::load(file, &buf)) {
|
||||
printf("load %s error %s\r\n", file.c_str(), acl::last_serror());
|
||||
return 1;
|
||||
}
|
||||
|
||||
acl::json json(buf);
|
||||
if (!json.finish()) {
|
||||
printf("invalid json: %s\r\n", buf.c_str());
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("parse json ok: %s\r\n", json.to_string().c_str());
|
||||
|
||||
json.reset();
|
||||
json.get_root().add_array(true)
|
||||
.add_array_text("name1")
|
||||
.add_array_text("name2")
|
||||
.add_array_text("name3");
|
||||
printf("build json: %s\r\n", json.to_string().c_str());
|
||||
|
||||
json.reset();
|
||||
json.get_root().add_text("name1", "value1")
|
||||
.add_text("name2", "value2")
|
||||
.add_text("name3", "value3")
|
||||
.add_number("name4", 100);
|
||||
printf("build json: %s\r\n", json.to_string().c_str());
|
||||
|
||||
json.reset();
|
||||
json.get_root().add_text("name1", "value1");
|
||||
printf("build json: %s\r\n", json.to_string().c_str());
|
||||
|
||||
json.reset();
|
||||
json.get_root().add_child(false, true)
|
||||
.add_text("name1", "value1")
|
||||
.add_text("name2", "value2")
|
||||
.add_text("name3", "value3");
|
||||
printf("build json: %s\r\n", json.to_string().c_str());
|
||||
|
||||
json.reset();
|
||||
json.get_root().add_child(false, true)
|
||||
.add_text("name1", "value1");
|
||||
printf("build json: %s\r\n", json.to_string().c_str());
|
||||
return 0;
|
||||
}
|
1
lib_acl_cpp/samples/json/json14/json1.txt
Normal file
1
lib_acl_cpp/samples/json/json14/json1.txt
Normal file
@ -0,0 +1 @@
|
||||
[ "name1", "name2", "name3" ]
|
1
lib_acl_cpp/samples/json/json14/json2.txt
Normal file
1
lib_acl_cpp/samples/json/json14/json2.txt
Normal file
@ -0,0 +1 @@
|
||||
[ { "name1": "value1" }, { "name2": "value2"}, {"name3": "value3"} ]
|
1
lib_acl_cpp/samples/json/json14/json3.txt
Normal file
1
lib_acl_cpp/samples/json/json14/json3.txt
Normal file
@ -0,0 +1 @@
|
||||
[ 1, 2, 3, 4, 5, 6 ]
|
8
lib_acl_cpp/samples/json/json14/stdafx.cpp
Normal file
8
lib_acl_cpp/samples/json/json14/stdafx.cpp
Normal file
@ -0,0 +1,8 @@
|
||||
// stdafx.cpp : 只包括标准包含文件的源文件
|
||||
// json.pch 将成为预编译头
|
||||
// stdafx.obj 将包含预编译类型信息
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
// TODO: 在 STDAFX.H 中
|
||||
//引用任何所需的附加头文件,而不是在此文件中引用
|
41
lib_acl_cpp/samples/json/json14/stdafx.h
Normal file
41
lib_acl_cpp/samples/json/json14/stdafx.h
Normal file
@ -0,0 +1,41 @@
|
||||
// stdafx.h : 标准系统包含文件的包含文件,
|
||||
// 或是常用但不常更改的项目特定的包含文件
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
//#include <iostream>
|
||||
//#include <tchar.h>
|
||||
|
||||
// TODO: 在此处引用程序要求的附加头文件
|
||||
|
||||
#include "acl_cpp/lib_acl.hpp"
|
||||
#include "lib_acl.h"
|
||||
|
||||
#ifdef WIN32
|
||||
#include <io.h>
|
||||
#define snprintf _snprintf
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
|
||||
// 以下宏定义用来帮助检查变参中的参数类型是否合法
|
||||
|
||||
#undef logger
|
||||
#define logger printf
|
||||
#undef logger_error
|
||||
#define logger_error printf
|
||||
#undef logger_warn
|
||||
#define logger_warn printf
|
||||
#undef logger_fatal
|
||||
#define logger_fatal printf
|
||||
#undef logger_panic
|
||||
#define logger_panic printf
|
||||
|
||||
extern void __attribute__((format(printf,3,4))) \
|
||||
dummy_debug(int, int, const char*, ...);
|
||||
#undef logger_debug
|
||||
#define logger_debug dummy_debug
|
||||
#endif
|
3
lib_acl_cpp/samples/json/json14/valgrind.sh
Normal file
3
lib_acl_cpp/samples/json/json14/valgrind.sh
Normal file
@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
valgrind --tool=memcheck --leak-check=yes -v ./json
|
Loading…
Reference in New Issue
Block a user