刚刚接触JSON,在http://www.json.org上看到关于JSON string的结构图
看图的意思说明JSON string的字符可以是一般Unicode字符或者是诸如\"、\t、\\等字符,这样子对吗?
但是再看下载的源码实例,有个这样一个函数void ConvertUnicodeToJsonFormatL(const TDesC& aString, RBuf& aOutput)
把Unicode字符传转为 Json格式,void ConvertUnicodeToJsonFormatL(const TDesC& aString, RBuf& aOutput)
{
RBufAppendL(aOutput, '\"' );
for(TInt i = 0; i < aString.Length(); ++i)
{
switch( aString[i] )
{
case '\\':
RBufAppendL(aOutput, _L("\\\\") );
break;

case '/':
RBufAppendL(aOutput, _L("\\/") );
break;

case '"':
RBufAppendL(aOutput, _L("\\\"") );
break;

case '\t':
RBufAppendL(aOutput, _L("\\t") );
break;
case '\f':
RBufAppendL(aOutput, _L("\\f") );
break;
case '\b':
RBufAppendL(aOutput, _L("\\b") );
break;
case '\n':
RBufAppendL(aOutput, _L("\\n") );
break;
case '\r':
RBufAppendL(aOutput, _L("\\r") );
break;

default:
{
if( aString[i] < 256 )
RBufAppendL(aOutput, TChar(aString[i]) );
else
{
TBuf<32> format;
format.Format(_L("\\u%04x"), aString[i]);
RBufAppendL(aOutput, format);
}
}
}
}
RBufAppendL(aOutput, '\"' );
}
这里比如对于引号“"”怎么连加3个反斜线,看示例图不应该是加一个反斜线嘛高手指点下哈,不胜感激!

解决方案 »

  1.   


    这个我知道阿,\\第一个是转义用的,这样才能输出一个反斜线但是如果Unicode字符串中有个引号,如abcd"dd,那么JSON直接写成"abcd\"dd"不久可以了么?但是如果按照算法是不是会写成"abcd\\\"dd"了?
      

  2.   

    是啊, 在服务器端的语言中 是写成 "abcd\\\"dd"
      

  3.   

    分清楚客户端和服务器端的区别。服务器端最终输出的只是字符串。
    现在 客户端的js字符串中需要的是 \"
    那么 服务器端 就需要输出 \"
    \" 怎么输出? 用服务器端的C#输出,
    C#的字符串中直接写"\""的话只能得到", 因为它也需要转义,碰巧和js的转义是一致的
    为了输出\" 对C#就需要 \用\\ , "用\", 加在一起是 \\\", 这样最终输出字符串\"
    传到了客户端,js的字符串中就得到的是\"