acl/lib_acl_cpp/samples/json/json6/json.cpp
zsxxsz 153101288b json 编码器需要兼容旧的标志位
json 编码器需要兼容旧的标志位
2014-01-03 20:04:28 +08:00

123 lines
5.0 KiB
C++

#include "stdafx.h"
static void print(acl::json& json)
{
acl::json_node* node = json.first_node();
const char* ptr;
while (node)
{
ptr = node->to_string().c_str();
printf(">>>node: %s\r\n", ptr);
node = json.next_node();
}
}
static void usage(const char* procname)
{
printf("usage: %s -h[help] -o [parse once, default: no]\r\n", procname);
}
int main(int argc, char* argv[])
{
bool once = false;
int ch;
while((ch = getopt(argc, argv, "ho")) > 0)
{
switch (ch)
{
case 'h':
usage(argv[0]);
return 0;
case 'o':
once = true;
break;
default:
break;
}
}
const char* datas[] = {
"{\"data\": [{\"action\": \"set\", \"updatetime\": \"20130928150025\"}, {\"action\": \"get\", \"updatetime\": \"20100928150025\"}]}",
"{\"data\": [{\"action\": \"set\"}, {\"action\": \"get\"}, {\"action\": \"del\"}], \"value\": \"result\", \"value2\": {\"value21\": \"value211\"}}",
"{\"DataValue\": {\"RemoteLoginRemind\": [{\"value\": \"New\", \"onclick\": \"CreateNewDoc()\"}, {\"value\": \"Open\", \"onclick\": \"OpenDoc()\"}, {\"value\": \"Close\", \"onclick\": \"CloseDoc()\"}, [{\"value\": \"Save\", \"onclick\": \"SaveDoc()\"}]]}}",
"{\"DataValue\": {\"RemoteLoginRemind\": \"true1\", \"ModifyPasswdRemind\": \"true2\", \"MailForwardRemind\": \"true3\", \"SecureLoginVerification\": \"remote\"}}",
"{\"data\": [{\"action\": \"set\"}], \"value\": \"result\"}",
"{\"data\": {\"action\": \"set\"}, \"cmd\": {\"value\": \"result\"}}",
"{\"data\": {}, \"value\": \"result\"}",
"{\"item1\": [\"open\", \"onclick\", \"item2\", \"Help\"]}",
"{\"item1\": [{\"open\": \"onclick\"}, {\"item2\": \"Help\"}]}",
"{\"data\": \"action\", \"value\": \"result\"}",
"{\"data\": [{\"action\": \"set\"}, {\"action\": \"get\"}]}",
"{\"value\": \"Close\", \"onclick\": \"CloseDoc()\", \"test\": {\"dddd\": {\"value\": \"Help\", \"onclick\": \"Help()\"}, \"help\": \"hello world!\"}}",
"{\"value\": \"Close\", \"onclick\": \"CloseDoc()\", {\"dddd\": {\"value\": \"Help\", \"onclick\": \"Help()\"}, \"help\": \"hello world!\"}}",
"{\"menuitem2\": [{\"value1\": \"Open1\", \"onclick\": \"Open1()\"}, {\"value2\": \"Open2\", \"onclick\": \"Open2()\"}, [{\"value3\": \"Open3\", \"onclick\": \"Open3()\"}], [\"value4\", \"Open4\", \"onclick\", \"Open4()\"], [{\"value5\": \"Open5\"}, \"onclick\", \"Open5()\"], {\"value6\": \"Open6\", \"onclick\": \"Open6()\"}]}",
"{\"help\": \"hello world!\", \"menuitem2\": [{\"value1\": \"Open1\", \"onclick\": \"Open1()\"}, [{\"value3\": \"Open3\", \"onclick\": \"Open3()\"}], {\"value6\": \"Open6\"}]}",
"{\"menu\": {\"item\": {\"value\": \"open\"}}, \"help\": \"hello\"}",
"{\"menu\": {\"item\": {\"value\": \"open\", \"value\": \"close\", \"value\": \"save\"}}, \"help\": \"hello\"}",
"{\"menu\": [{\"value\": \"open\", \"value\": \"close\"}, \"open\", \"close\", \"new\", [\"open\", \"close\", \"new\"], [{\"value\": \"open\", \"value\": \"close\"}]]}",
"{\"menu\": {\"item\": {\"entry\": {\"value\": \"open\", \"value\": \"close\"}, \"entry\": {\"value\": \"new\"}}}, \"help\": \"hello\"}",
"{\"menu name\": {\"id:file\": \"file\", \"value{\": \"File\", \"popup{}\": {\"menuitem1}\": [{\"value\": \"New\", \"onclick\": \"CreateNewDoc()\"}, {\"value\": \"Open\", \"onclick\": \"OpenDoc()\"}, {\"value\": \"Close\", \"onclick\": \"CloseDoc()\"}], \"menuname[]\": \"hello world\", \"inner\": {\"value\": \"new \", \"value\": \"open\"}, \"menuitem2\": [{\"value\": \"New\", \"onclick\": \"CreateNewDoc()\"}, {\"value\": \"Open\", \"onclick\": \"OpenDoc()\"}, {\"value\": \"Close\", \"onclick\": \"CloseDoc()\"}, {{\"value\": \"Help\", \"onclick\": \"Help()\"}}]}}, \"help\": \"hello world!\", \"menuitem2\": [{\"value1\": \"Open1\", \"onclick\": \"Open1()\"}, {\"value2\": \"Open2\", \"onclick\": \"Open2()\"}, [{\"value3\": \"Open3\", \"onclick\": \"Open3()\"}], [{\"value4\": \"Open4\"}, \"onclick\", \"Open4()\"], [\"value5\", \"Open5\", \"onclick\", \"Open5()\"], {\"value6\": \"Open6\", \"onclick\": \"Open6()\"}]}",
NULL
};
size_t nok = 0, i;
for (i = 0; datas[i] != NULL; i++)
{
#if 0
if (i != 16)
continue;
#endif
acl::json json;
if (once)
json.update(datas[i]);
else
{
const char* ptr = datas[i];
char buf[2];
while (*ptr)
{
buf[0] = *ptr;
buf[1] = 0;
json.update(buf);
ptr++;
}
}
printf("====================================================================\r\n");
printf(">>> src string:\r\n%s\r\n", datas[i]);
printf(">>> to string:\r\n%s\r\n", json.to_string().c_str());
if (json.to_string() != datas[i])
{
printf("====================================================================\r\n");
printf("ERROR, not equal, item: %d\r\n", (int) i);
print(json);
return 0;
}
else
{
nok++;
printf("OK\r\n");
print(json);
}
}
printf("====================================================================\r\n");
if (nok == i)
printf("All ok\r\n");
else
printf("Some Error(%d, %d)\r\n", (int) nok, (int) i);
#ifdef WIN32
printf("enter any key to exit!\r\n");
getchar();
#endif
return 0;
}