AFNetworking JSON序列化问题 [英] AFNetworking JSON serialization problems
问题描述
我正在使用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屋!