如何防止JSONKit从ASP.NET JSONdate格式转义反斜杠?

我正在使用JSONKit在ASP.NET RESTful服务之间对JSON进行编码/解码。

服务使用的date格式在这里讨论,如下所示:

"\/Date(1198908717056)\/" 

问题是当JSONKit处理一个看起来像上面的string时,它会转义反斜杠,所以最终结果如下所示:

 "\\/Date(1198908717056)\\/" 

JSON规范说你可以select转义正斜杠(/),所以JSONKit应该解释“\ /”原样,而不是转义反斜杠。

有没有人知道一种方法来防止JSONKit逃避反斜杠时,正如上面的情况下的ASP.NET JSONdate格式的正斜杠?

编辑:忘记以前的答案。 正如约翰所说,这可能是不正确的,有副作用。 John 提交了一个更改 ,它实现了一个名为JKSerializeOptionEscapeForwardSlashes的选项,它可以解决您的问题。


即使JSONKit中的parsing器似乎处理\/ ,它看起来像生成器不。 jk_encode_add_atom_to_buffer()

 if(JK_EXPECT_F(utf8String[utf8Idx] >= 0x80U)) { encodeState->atIndex = startingAtIndex; goto slowUTF8Path; } 

这是一个非ASCII字符,去slowUTF8Path

 if(JK_EXPECT_F(utf8String[utf8Idx] < 0x20U)) 

这是一个控制字符(如\n\t ),转义它。

 if(JK_EXPECT_F(utf8String[utf8Idx] == '\"') || JK_EXPECT_F(utf8String[utf8Idx] == '\\')) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; } 

这是一个双引号或反斜杠,逃避它 – 这里是错误,因为它没有考虑到\/

我已经修补了JSONKit.m,以便它执行以下操作:

 if(JK_EXPECT_F(utf8String[utf8Idx]) == '\\' && JK_EXPECT_F(utf8String[utf8Idx+1]) == '/') { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '/'; utf8Idx++; } else if(JK_EXPECT_F(utf8String[utf8Idx] == '\"') || JK_EXPECT_F(utf8String[utf8Idx] == '\\')) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; } else encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = utf8String[utf8Idx]; 

和我的testing程序正确地为您的string生成JSON片段:

 NSString *test = @"\\/Date(1198908717056)\\/"; NSLog(@"%@", [test JSONString]); 

输出:

 "\/Date(1198908717056)\/" 

没有我的补丁,程序输出:

 "\\/Date(1198908717056)\\/" 

也就是说,我build议你用JSONKit提交一个错误报告 。 约翰肯定是最好的人来解决这个问题,JSONKit是太优化了,我有信心在这个补丁; 我根本不熟悉JSONKit。 随意引用他到这个职位。