【发布时间】:2014-01-04 13:13:37
【问题描述】:
我有一本大字典(下面的部分示例 - 总共有 26 种产品),我需要将其发送回 ColdFusion Web 服务。我能够连接到 Web 服务,并且在检查 NSHTTPURLResponse statusCode 时我得到 200,这表明该服务正在接收并返回一些东西(对吗?)但是当我检查返回时我得到 HTML 结果,其中一部分说明了错误:
coldfusion.runtime.MissingArgumentException: The PAJSONSTRING parameter to the setPurchaseAgreements function is required but was not passed in.
在我看来,我没有设置变量 PAJSONSTRING 的值。所以我的问题是如何将这个 JSON 传递给那个变量?我想到了查询字符串,但最终会在 5000 到 7000 个字符之间传递,具体取决于用户发回的内容。但我似乎找不到如何使用 POST 设置参数值的示例。任何想法将不胜感激。
PA = {
"CUSTOMER_ID" = xxxxxxx;
"GROSS_GROWTH_NO_YF_FLU" = 39385;
"GROSS_GROWTH_ONLINE_DISC" = 394;
"GROSS_GROWTH_SALES" = 56500;
"GROSS_PROJECTED_NO_YF_FLU" = 35805;
"GROSS_PROJECTED_ONLINE_DISC" = 358;
"GROSS_PROJECTED_SALES" = 52920;
"GROSS_SALES" = 0;
"GROSS_SALES_CUST_PRICE_LIST" = 0;
"GROWTH_MATCH_REBATE_AMT" = 3509;
"GROWTH_NET_SALES" = 56500;
"GROWTH_NET_SALES_NO_YF_FLU" = 394;
"GROWTH_PROJ_SALES_NO_YF_FLU" = 3509;
"GROWTH_REBATE_AMT" = 3509;
"GROWTH_REBATE_PCT" = 9;
"MATCH_GRTH_REBATE_GRTH_SALES" = "";
"MATCH_NET_SALES" = 49200;
"MATCH_PROJ_SALES_NO_YF_FLU" = 35447;
"MATCH_REBATE_AMT" = 3190;
"MATCH_REBATE_NET_DISCOUNT_SLS" = "";
"MTH_GRTH_RBT_GRTH_NET_DISC_SLS" = "";
"NEW_PRICE_DISC_NET_DISC" = "";
"ONLINE_DISCOUNT_PCT" = 1;
"OPER_ID" = xxxxxx;
"PA_CREATE_DT" = "2014-01-03 05:00:00 +0000";
"PA_ID" = 0;
"PA_NAME" = "Copy of 8";
"PA_STATUS_ID" = 2;
"PRICELIST_TYPE_ID" = 5;
"PRICE_LIST_GROWTH_SALES" = "";
"PRICE_LIST_PROJECTED_SALES" = "";
"REBATE_ELG_PROD_COUNT" = 0;
"SALES_ROSTER_ID" = 20016;
"START_DT" = "2014-01-03 17:56:12 +0000";
"STATUS_PRICE_LIST_NET_DISC_SLS" = "";
"STATUS_PRICE_LIST_PROJ_SALES" = "";
"TOTAL_GRTH_MATCH_REBATE_AMT" = "";
"UPFRONT_DISCOUNT_PCT" = 0;
};
PRODUCTS = (
{
"DISCOUNT_DOSE_PRICE" = 8;
"DISCOUNT_UNIT_PRICE" = 80;
"GROWTH_DOSES" = 0;
"GROWTH_PROJECTED" = 0;
"LIST_DOSE_PRICE" = 0;
"OPER_ID" = 20016;
"PA_PRODUCT_ID" = xxxxx;
"PRODUCT_ID" = xxxxxx;
"SALES_PROJECTED" = 0;
"SUGGESTED_DOSES" = 0;
"USER_SELECTED_DOSES" = 0;
},
{
"DISCOUNT_DOSE_PRICE" = 8;
"DISCOUNT_UNIT_PRICE" = 80;
"GROWTH_DOSES" = 0;
"GROWTH_PROJECTED" = 0;
"LIST_DOSE_PRICE" = 0;
"OPER_ID" = 20016;
"PA_PRODUCT_ID" = xxxxx;
"PRODUCT_ID" = xxxxx;
"SALES_PROJECTED" = 0;
"SUGGESTED_DOSES" = 0;
"USER_SELECTED_DOSES" = 0;
"DISCOUNT_DOSE_PRICE" = 8;
"DISCOUNT_UNIT_PRICE" = 80;
"GROWTH_DOSES" = 0;
"GROWTH_PROJECTED" = 0;
"LIST_DOSE_PRICE" = 0;
"OPER_ID" = 20016;
"PA_PRODUCT_ID" = xxxxx;
"PRODUCT_ID" = xxxxx;
"SALES_PROJECTED" = 0;
"SUGGESTED_DOSES" = 0;
"USER_SELECTED_DOSES" = 0;
"DISCOUNT_DOSE_PRICE" = 8;
"DISCOUNT_UNIT_PRICE" = 80;
"GROWTH_DOSES" = 0;
"GROWTH_PROJECTED" = 0;
"LIST_DOSE_PRICE" = 0;
"OPER_ID" = 20016;
"PA_PRODUCT_ID" = xxxxx;
"PRODUCT_ID" = xxxxx;
"SALES_PROJECTED" = 0;
"SUGGESTED_DOSES" = 0;
"USER_SELECTED_DOSES" = 0;
"DISCOUNT_DOSE_PRICE" = 8;
"DISCOUNT_UNIT_PRICE" = 80;
"GROWTH_DOSES" = 0;
"GROWTH_PROJECTED" = 0;
"LIST_DOSE_PRICE" = 0;
"OPER_ID" = 20016;
"PA_PRODUCT_ID" = xxxxx;
"PRODUCT_ID" = xxxxx;
"SALES_PROJECTED" = 0;
"SUGGESTED_DOSES" = 0;
"USER_SELECTED_DOSES" = 0;
"DISCOUNT_DOSE_PRICE" = 8;
"DISCOUNT_UNIT_PRICE" = 80;
"GROWTH_DOSES" = 0;
"GROWTH_PROJECTED" = 0;
"LIST_DOSE_PRICE" = 0;
"OPER_ID" = 20016;
"PA_PRODUCT_ID" = xxxxx;
"PRODUCT_ID" = xxxxx;
"SALES_PROJECTED" = 0;
"SUGGESTED_DOSES" = 0;
"USER_SELECTED_DOSES" = 0;
"DISCOUNT_DOSE_PRICE" = 8;
"DISCOUNT_UNIT_PRICE" = 80;
"GROWTH_DOSES" = 0;
"GROWTH_PROJECTED" = 0;
"LIST_DOSE_PRICE" = 0;
"OPER_ID" = 20016;
"PA_PRODUCT_ID" = xxxxx;
"PRODUCT_ID" = xxxxx;
"SALES_PROJECTED" = 0;
"SUGGESTED_DOSES" = 0;
"USER_SELECTED_DOSES" = 0;
"DISCOUNT_DOSE_PRICE" = 8;
"DISCOUNT_UNIT_PRICE" = 80;
"GROWTH_DOSES" = 0;
"GROWTH_PROJECTED" = 0;
"LIST_DOSE_PRICE" = 0;
"OPER_ID" = 20016;
"PA_PRODUCT_ID" = xxxxx;
"PRODUCT_ID" = xxxxx;
"SALES_PROJECTED" = 0;
"SUGGESTED_DOSES" = 0;
"USER_SELECTED_DOSES" = 0;
"DISCOUNT_DOSE_PRICE" = 8;
"DISCOUNT_UNIT_PRICE" = 80;
"GROWTH_DOSES" = 0;
"GROWTH_PROJECTED" = 0;
"LIST_DOSE_PRICE" = 0;
"OPER_ID" = 20016;
"PA_PRODUCT_ID" = xxxxx;
"PRODUCT_ID" = xxxxx;
"SALES_PROJECTED" = 0;
"SUGGESTED_DOSES" = 0;
"USER_SELECTED_DOSES" = 0;
"DISCOUNT_DOSE_PRICE" = 8;
"DISCOUNT_UNIT_PRICE" = 80;
"GROWTH_DOSES" = 0;
"GROWTH_PROJECTED" = 0;
"LIST_DOSE_PRICE" = 0;
"OPER_ID" = 20016;
"PA_PRODUCT_ID" = xxxxx;
"PRODUCT_ID" = xxxxx;
"SALES_PROJECTED" = 0;
"SUGGESTED_DOSES" = 0;
"USER_SELECTED_DOSES" = 0;
"DISCOUNT_DOSE_PRICE" = 8;
"DISCOUNT_UNIT_PRICE" = 80;
"GROWTH_DOSES" = 0;
"GROWTH_PROJECTED" = 0;
"LIST_DOSE_PRICE" = 0;
"OPER_ID" = 20016;
"PA_PRODUCT_ID" = xxxxx;
"PRODUCT_ID" = xxxxx;
"SALES_PROJECTED" = 0;
"SUGGESTED_DOSES" = 0;
"USER_SELECTED_DOSES" = 0;
"DISCOUNT_DOSE_PRICE" = 8;
"DISCOUNT_UNIT_PRICE" = 80;
"GROWTH_DOSES" = 0;
"GROWTH_PROJECTED" = 0;
"LIST_DOSE_PRICE" = 0;
"OPER_ID" = 20016;
"PA_PRODUCT_ID" = xxxxx;
"PRODUCT_ID" = xxxxx;
"SALES_PROJECTED" = 0;
"SUGGESTED_DOSES" = 0;
"USER_SELECTED_DOSES" = 0;
}
);
}
部分代码...
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:dictJSONData options:NSJSONWritingPrettyPrinted error:&error];
NSString* urlString = SERVICE_SET_PA;
NSURL* url = [NSURL URLWithString:urlString];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:jsonData];
NSOperationQueue* queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse* response, NSData* data, NSError* responseError) {
id results = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves | NSJSONReadingAllowFragments error:nil];
NSString* strResults = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
DDLogVerbose(@"%@", strResults);
NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*) response;
if (data.length > 0 && responseError == nil) {
DDLogVerbose(@"%@", httpResponse.allHeaderFields);
[self receivedData:data];
} else if (data.length == 0 && error == nil) {
[self emptyReply];
} else if (responseError != nil) {
[self displayError: error];
}
}];
编辑:记录 jsonData 显示此(部分帖子):
<7b0a2020 22504122 203a207b 0a202020 20225041 5f494422 203a2030 2c0a2020 2020224d 41544348 5f475254 485f5245 42415445 5f475254 485f5341 4c455322 203a2022 222c0a20 20202022 50415f53 54415455 535f4944 22203a20 322c0a20 20202022 47524f57 54485f50 524f4a5f 53414c45 535f4e4f 5f59465f 464c5522 203a2033 3530392c...
反序列化并记录它显示这个(部分帖子):
PA = {
"CUSTOMER_ID" = 955728;
"GROSS_GROWTH_NO_YF_FLU" = 39385;
"GROSS_GROWTH_ONLINE_DISC" = 394;
"GROSS_GROWTH_SALES" = 56500;
"GROSS_PROJECTED_NO_YF_FLU" = 35805;
"GROSS_PROJECTED_ONLINE_DISC" = 358;
"GROSS_PROJECTED_SALES" = 52920;
"GROSS_SALES" = 0;
"GROSS_SALES_CUST_PRICE_LIST" = 0;
"GROWTH_MATCH_REBATE_AMT" = 3509;
"GROWTH_NET_SALES" = 56500;
"GROWTH_NET_SALES_NO_YF_FLU" = 394;
"GROWTH_PROJ_SALES_NO_YF_FLU" = 3509;
...
所以至少在这个程度上它看起来不错。
【问题讨论】:
-
您是否检查了 JSON 数据是否已创建?服务器期待什么?
-
所以大概服务器以某种方式期待不同格式的数据。 JSON中可能有不同的键?
PAJSONSTRING是什么? -
PAJSONSTRING 是一个期望 JSON 字符串的变量。如果它是一个 URL 查询,它看起来像 someplace.com?PAJSONSTRING=MYJSONSTRING,我可以重写我的代码来传递一个字符串,但我认为它会太长。
-
你在用
FORM.PAJSONSTRING吗? -
不,我会在哪里使用它?
标签: objective-c json post