首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSJSONSerialization编码?

NSJSONSerialization编码?
EN

Stack Overflow用户
提问于 2014-11-11 03:38:46
回答 1查看 924关注 0票数 0

我正在尝试将我的NSDictionary转换为json字符串,然后通过HTTPBody (POST请求)将数据发送到我的web api。我将我的字典转换为json,如下所示:

代码语言:javascript
复制
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&error];

我发现上面的方法并没有对我的数据进行编码(至少像“&”这样的特殊字符没有被处理)。所以在服务器端收到的数据是乱七八糟的,我无法正确地读取它。

有关正在发生的情况的更多详细信息,请假设以下字典:

代码语言:javascript
复制
"salutation":"Mrs."
"companyName":"T & F LLP"
"firstName":"Tania"
"country":"Canada"

此字典使用上面的方法转换为NSData,稍后使用如下所示

代码语言:javascript
复制
[request setHTTPBody:nsDataFromJson];

我在服务器端收到了什么?我明白了

代码语言:javascript
复制
{"contact":"{\"firstName\":\"Tania\",\"salutation\":\"Mrs.\",\"company\":\"Aird 

我只能获得特殊字符&的数据,并且我只能假设发生了这种情况,因为我提到的第一种方法不是像&这样编码特殊字符

因此,我解决了这个问题(暂时):将字典转换为json字符串,然后用%26替换每个&,然后从这个新字符串(带有处理的特殊字符)创建NSData。然后我把整个身体放在我的服务器上。

那么,你知道如何正确处理这件事吗?

顺便说一下,如果我也使用SBJSON,同样的问题也会发生。

EN

回答 1

Stack Overflow用户

发布于 2015-02-10 05:27:35

已经3个月了,所以我猜问题现在一定已经解决了。

接收到的JSON数据被破坏的原因是解析器将&(&)解释为URL地址的一部分。借用this link中的一些代码,我将此函数编写为percent encode&以及其他一些可能会被混淆的字符:

代码语言:javascript
复制
+ (NSDictionary*) percentEncodeDictionayValues:(NSDictionary*) dict
{
    NSMutableDictionary* edict=[NSMutableDictionary dictionaryWithDictionary:dict];

    NSMutableCharacterSet* URLQueryPartAllowedCharacterSet = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy];
    [URLQueryPartAllowedCharacterSet removeCharactersInString:@"?&=@+/'"];

    for(NSString* key in [dict allKeys])
    {
        if([dict[key] isKindOfClass:[NSString class]])
            edict[key] = [dict[key] stringByAddingPercentEncodingWithAllowedCharacters:URLQueryPartAllowedCharacterSet];
    }
    return edict;
}

因此,您可以在输入NSJSONSerialization之前使用此函数对NSDictionary对象进行预处理,接收到的数据将保留&和其他字符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26851633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档