Json:Unicode charecter'%'在声明的最后逃脱

时间:2015-08-31 07:38:27

标签: c++ json escaping

在我的代码中,当我尝试打印'%'它逃脱的命令行上的字符(即它不会在命令提示符下打印),我相信Json编译器正在转义该字符。

我正在使用Jjun的Cajun - C ++源代码

如何保留'%'字符。下面是我的代码片段和Writter.cpp

代码段:

progVal = mrLdProgress_.fgi.reProgress.progress;
objVd["Progress%"] = json::Number((int)((U32)(progVal)* 100 /0xFFFF));
    if(progVal == 0xFFFF)
    {
        objVd["Status"] =json::String("Completed");
        objVd["Estimated Time Left"] = json::String("-");
    }
    else
    {
        objVd["Status"] =json::String("In progress");
    }

Writter.cpp的代码片段实际上它打印Json" name":" value" :

if(it->name != "My Message" && it->name != "Begin Table" && it->name != "End Table")
        {
            if(needNewLine){ Writer::putchar(','); Writer::putchar('\n'); needNewLine=false;}

            int tabs=m_nTabDepth; while(tabs) { Writer::putchar('\t'); --tabs; } Writer::putchar('"');

            if(it->name.c_str()[it->name.length()-1]=='&') it->name = it->name.substr(0,it->name.length()-1);            
            Writer::printf("%s%s",it->name.c_str(),"\" : ");

            Write_i(it->element);
            needNewLine=true;
        }

int Writer::printf(const char *format, ...)
{
    char buff[4096];
    char *ptr=buff;

    if(!format) return 0;

    va_list args;
    va_start(args, format);
#ifndef OS_PREBOOT
    int ret = vsprintf(buff,format,args);
#else
    int ret = print(&ptr,format,args);
#endif
    va_end(args);

    cache_string(buff);

    return ret;
}

字符串" Progress%"在这里是真正的罪魁祸首,只有打印进度才会转出%字符。

我尝试添加控制字符" \"到下面的行

> Writer::printf("%s%s",it->name.c_str(),"\" : ");

以便在命令提示符下打印%符号但我收到编译器错误。

所以请帮我解决这个问题。

当我添加'%\'在上面的语句中它起作用,符号%打印在命令提示符上。

问题的输出:

{
"My Operation":[
{
        "Operation Status" : {
                "Count of operation" : 0,
                "Status" : "Success",
                "Description" : "None"
        },
        "Response Data" : {
                "Count Operation Status" : [
                        {
                                "Count" : 0,
                                "Operation" : "INIT",
                                "Progress" : "-",
                                "Status" : "Not in progress",
                        }
                ]
        }
}
]
} 

正如您在输出中看到的那样,%%不显示仅显示进度。

0 个答案:

没有答案