带有版权符号的objective-c的Json反序列化失败

时间:2019-05-09 23:22:54

标签: objective-c json nsjsonserialization

我主要是c#开发人员,但我的任务是解决Objective-C Mac客户端中的错误。我正在使用nsjsonserialization序列化json对象。

如果json对象包含版权符号,则该错误会在反序列化时发生。

我们使用的是sbjson,我切换到nsjsonserialization,但这不能解决问题。我不知道我做错了还是需要使用其他序列化库。在C#中,我可以只使用newtonsoft。我应该使用与Objective-C类似的标准json序列化库吗?

这是序列化代码:

-(void)sendMessage:(NSString *)method:(NSDictionary *)inData {
    NSDictionary *outData = [[NSDictionary alloc] init];

    @try {
        JsonServiceComm *newCom = [[JsonServiceComm alloc] init];
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", host, method]];

        NSData *json = [NSJSONSerialization dataWithJSONObject:inData options:kNilOptions error:nil];
        json = [json subdataWithRange:NSMakeRange(0, [json length] - 1)];
        NSString* jsData = [NSString stringWithUTF8String:[json bytes]];
        NSString *outData  = [newCom userSpaceRequest:url :jsData];

    } @catch (NSException* ex) {
        NSLog(@"%@", [ex reason]);
    }
}

这里是反序列化的地方:

-(void)handleMessage:(NSString *)messageType message:(NSString *)message {
    @autoreleasepool {

        NSData *jsMessage = [message dataUsingEncoding:NSUTF8StringEncoding];
        NSError *error;
        NSDictionary *data = [NSJSONSerialization JSONObjectWithData:jsMessage                                                        options:NSJSONReadingMutableLeaves                                                               error:&error];
}}

如果数据不包含版权符号,则* data填充有值的字典,但是,如果数据确实包含版权符号,则* data无效。返回的错误是“解析对象时文件意外结束。”

2 个答案:

答案 0 :(得分:0)

此问题已解决。我发现json是通过单独的json解析器传递的,该解析器未进行utf8编码。

答案 1 :(得分:-2)