AFNetworking JSON序列化问题 [英] AFNetworking JSON serialization problems

查看:343
本文介绍了AFNetworking JSON序列化问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用AFNetworking发送JSON(最初存储在NSDictionary中).我的对象看起来像这样(摘自文档注释):

I'm sending JSON (initially stored in an NSDictionary) using AFNetworking. My object looks like this (taken from a doc comment):

/**
 *  Sends a create request to the API server
 *  Success will be a dictionary containing:
 *
 *   playlistSession: {
 *       "mediaSegments": {},
 *       "mediaSequence": 0,
 *       "timeElapsed": 0,
 *       "config": {
 *           "maxSegments": 4,
 *           "targetDuration": 10
 *       },
 *       "meta": {
 *           "id": "test",
 *           "shouldBeAvailable": false,
 *           "isAvailable": false,
 *           "shouldFinish": false,
 *           "isFinished": false
 *       }
 *   }
 *
 *  And should be appended to the sessionData dictionary
 */

然后我在服务器上得到了它:

and I get this on the server:

{ fileSequence: '3',
  playlistSession: 
   { config: { maxSegments: '4', targetDuration: '10' },
     mediaSequence: '0',
     meta: 
      { id: 'MioeXvdiwB',
        isAvailable: '0',
        isFinished: '0',
        shouldBeAvailable: '0',
        shouldFinish: '0' },
     timeElapsed: '0' } }

带有字符和字符串,数字和布尔值应在其中.我在做错什么吗?

With characters and strings where numbers and booleans should be. Am I doing something wrong?

这是请求(对象存储在NSMutableDictionary中):

Here's the request (the object is stored in an NSMutableDictionary):

self.sessionData[fileSequenceKey] = [NSNumber numberWithInt:fileNumber];
self.sessionData[playlistSessionKey][metaKey][shouldFinishKey] = [NSNumber numberWithBool:lastSegment];

NSString *urlString = [[NSURL URLWithString:[NSString stringWithFormat:kAppendPath, self.postPath] relativeToURL:self.manager.baseURL] absoluteString];

NSURLRequest *request = [self.manager.requestSerializer multipartFormRequestWithMethod:@"POST"
                                                                                     URLString:urlString
                                                                                    parameters:self.sessionData
                                                                     constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
                                                                         NSError *error;
                                                                         [formData appendPartWithFileURL:target name:mediaSegmentKey error:&error];
                                                                     }];

        AFHTTPRequestOperation *operation = [self.manager HTTPRequestOperationWithRequest:request
                                                                                  success:[self successBlock:lastSegment]
                                                                                  failure:[self failureBlock:lastSegment]];
        [operation setUploadProgressBlock:[self completionBlock]];

        [self.manager.operationQueue addOperation:operation];
        fileNumber++;

推荐答案

我最终在我的NSDictionary+JSON类别中添加了一个名为JSONString

I ended up adding a method to my NSDictionary+JSON category called JSONString

/**
 *  Serializes a JSON string to be sent over the network
 *
 *  @return The serialized playlist session JSON string
 */
- (NSString*)JSONString {
    NSError *error;
    NSData *serializedData = [NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:&error];

    NSString *JSONString = [[NSString alloc] initWithData:serializedData encoding:NSUTF8StringEncoding];

    return JSONString;
}

返回不需要强制或解析的NSString,只需在nodejs

returns a NSString that doesn't need to be coerced or parsed, just a simple call to JSON.parse() in nodejs

这篇关于AFNetworking JSON序列化问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆