AFNetworking:如何发布有序的 JSON
Posted
技术标签:
【中文标题】AFNetworking:如何发布有序的 JSON【英文标题】:AFNetworking: how to post a ordered JSON 【发布时间】:2013-09-19 14:21:17 【问题描述】:我知道 JSON 规范说对象是一组无序的名称/值对。但我真的需要将有序的 JSON 发送到网络服务。问题是:
在网络服务(我不知道或无法访问代码)上,有一个步骤可以将我的 JSON 转换为 SOAP(所有对象都必须订购)。
这是我尝试过的:
NSString *json = @"'perf':1,'begin':'2013-07-17T15:35:33.659-03:00','end':'2013-08-01T15:35:33.659-03:00'";
NSMutableURLRequest *request = [self requestWithMethod:@"POST"
path:@"/myPath" parameters:nil];
//set headers
NSString *contentType = [NSString stringWithFormat:@"application/json"];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
[request addValue:@"any-value" forHTTPHeaderField: @"User-Agent"];
//create the body
NSMutableData *postBody = [NSMutableData data];
[postBody appendData:[json dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:postBody];
//Add your request object to an AFHTTPRequestOperation
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:
^(AFHTTPRequestOperation *operation,
id responseObject)
NSString *response = [operation responseString];
NSLog(@"response: [%@]",response);
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"error: %@", [operation error]);
];
[operation start];
那么,我该怎么做呢?
【问题讨论】:
对不起,它不计算。根据定义,JSON“对象”条目是无序的。任何要求它们以特定顺序呈现的网站都被严重破坏了。 (当然,数组条目是有序的,但这对任何人来说都不是问题。) PS:如果硬编码 JSON 字符串对您不起作用,我怀疑您误解了问题并且还有其他问题。 PPS:这样做的目的是什么:[NSString stringWithFormat:@"application/json"];
?
对 JSON 字符串进行硬编码有效。网络服务有问题。他正在尝试将我的 JSON 转换为 SOAP
如果网络服务不接受有效的 JSON,我会怀疑它的可靠性,当然不会信任它与金钱或隐私有关的任何事情。
【参考方案1】:
您需要自己创建 JSON 文本(或者找到提供排序的库,如果存在的话)。
考虑使用键数组并为每个键/值对创建文本,然后将其(使用适当的 JSON 格式)写入NSMutableString
。
【讨论】:
【参考方案2】:您没有说明 JSON 的顺序。无论如何,您不应该依赖 AFNetworking
对您的数据进行任何形式的操作。相反,你应该自己做。
由于 JSON 可以表示为 NSDictionary
(或 NSArray
),您应该使用这些类创建数据结构,使用内置的排序方法对它们进行排序(按字母顺序等),并且然后将它们转换为 JSON 表示。这不是您当前正在执行的操作,即将 JSON 创建为 NSString
。
【讨论】:
以上是关于AFNetworking:如何发布有序的 JSON的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JSON 格式解析通过 AFNetworking 1.0 获得的响应
如何使用 AFNetworking 在 http 中将 json 数据作为参数传递
如何使用 AFNetworking-2.0 执行 JSON 编码的 GET 请求?
如何使用 AFNetworking 查看 json POST 的错误?