1

这个问题已经被问过很多次了,但是使用相同的代码我让事情变得正常。

我已经使用下面的代码来生成 Json 字典和 Json 字符串。它成功地创建了 json 字符串但不是 json 字典。

 NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:&writeError];

 NSString *strJsonRequest = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

 NSDictionary *dicJsonRequest = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&convertError];

NSLog(@"\n dicjson : %@ \n json string : %@ \n error : %@",dicJsonRequest,strJsonRequest,convertError.localizedDescription);

我用来传递数据的这个方法,这需要 NSDictionary

- (void)postPath:(NSString *)path
      parameters:(NSDictionary *)parameters
         success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
         failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;

如果我使用此处创建的 JsonString 创建 NSDictionary,那么它将转换为 Web 服务端不接受的不同格式

NSDictionary *WSCALL = [NSDictionary dictionaryWithObjectsAndKeys:strJsonRequest,"Post", nil];
 NSLog(@"WSCALL : %@",WSCALL);

输出 :

WSCALL : {
    Post = "{\n  \"email\" : \"test@test.com\",\n  \"password\" : \"test\",\n  \"name\" : \"abcd\",\n ";
}

编辑

我在这里可以得出的结论是,webservice 需要创建相同的 json 字符串,但没有这个 "\n" 和 \"email\" (FALSE) -> "email"(TRUE) 但我无法替换 "\n" 因为它当我为字典中的键设置值时正在添加。

有了这个我得到输出

dicjson : {
    email = "test@test.com";
    name = abcd;
    password = test;
} 
 json string : {
  "email" : "test@test.com",
  "name" : "abcd",
  "password" : "test"
} 
 error : (null)
4

1 回答 1

0

好吧,您正在做的事情没有错误,并且日志清楚地表明您正在获取 NSDictionary,如果您尝试记录 NSDictionary,很明显您会收到 json 字符串响应。请参阅此行

NSLog(@"\n dicjson : %@ \n json string : %@ \n error : %@",dicJsonRequest,strJsonRequest,convertError.localizedDescription);

这里 NDDictionary 包含正确的值,因为日志显示

dicjson : {
    email = "test@test.com";
    name = abcd;
    password = test;
} 

所以你手头有一本有效的字典。只需做剩下的编码

于 2013-08-12T06:12:28.413 回答