gpt4 book ai didi

iphone - 如何防止 JSONKit 从 ASP.NET JSON 日期格式转义反斜杠?

转载 作者:可可西里 更新时间:2023-11-01 06:12:41 26 4
gpt4 key购买 nike

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

关于服务使用的日期格式here看起来像:

"\/Date(1198908717056)\/"

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

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

JSON 规范说您可以选择转义正斜杠 (/),因此 JSONKit 应该按原样解释 "\/" 而不是转义反斜杠。

有谁知道一种方法可以防止 JSONKit 在反斜杠后跟正斜杠时转义反斜杠,就像上面针对 ASP.NET JSON 日期格式的情况一样?

最佳答案

编辑:忘记之前的答案。正如约翰所提到的,它可能是不正确的并且有副作用。约翰的 committed a change它实现了一个名为 JKSerializeOptionEscapeForwardSlashes 的选项,它应该可以解决您的问题。


尽管 JSONKit 中的解析器似乎可以处理 \/,但生成器似乎没有。在 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];

我的测试程序正确地为您的字符串生成了 JSON 片段:

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

输出:

"\/Date(1198908717056)\/"

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

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

话虽如此,我推荐你file a bug report with JSONKit . John 无疑是解决此问题的最佳人选,而且 JSONKit 的优化程度太高,我对这个补丁没有信心;我对 JSONKit 一点都不熟悉。请随时向他推荐这篇文章。

关于iphone - 如何防止 JSONKit 从 ASP.NET JSON 日期格式转义反斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5844525/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com