【JSON入门问题】一个JSON转义字符的问题

hanzhida 2011-10-03 01:27:40
刚刚接触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个反斜线,看示例图不应该是加一个反斜线嘛

高手指点下哈,不胜感激!
...全文
9733 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanzhida 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hookee 的回复:]
是啊, 在服务器端的语言中 是写成 "abcd\\\"dd"
[/Quote]

但是服务器为什么这么写呢,输出一个引号为啥会用三个反斜线转义而不是一个呢?
hookee 2011-10-03
  • 打赏
  • 举报
回复
是啊, 在服务器端的语言中 是写成 "abcd\\\"dd"
hanzhida 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hookee 的回复:]
C#语言中字符串本身的\要写成\\, 这样 输出才会是\
[/Quote]

这个我知道阿,\\第一个是转义用的,这样才能输出一个反斜线

但是如果Unicode字符串中有个引号,如abcd"dd,那么JSON直接写成"abcd\"dd"不久可以了么?但是如果按照算法是不是会写成"abcd\\\"dd"了?
hookee 2011-10-03
  • 打赏
  • 举报
回复
C#语言中字符串本身的\要写成\\, 这样 输出才会是\
hookee 2011-10-03
  • 打赏
  • 举报
回复
分清楚客户端和服务器端的区别。服务器端最终输出的只是字符串。
现在 客户端的js字符串中需要的是 \"
那么 服务器端 就需要输出 \"
\" 怎么输出? 用服务器端的C#输出,
C#的字符串中直接写"\""的话只能得到", 因为它也需要转义,碰巧和js的转义是一致的
为了输出\" 对C#就需要 \用\\ , "用\", 加在一起是 \\\", 这样最终输出字符串\"
传到了客户端,js的字符串中就得到的是\"

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧