【问题标题】:ASIHTTPRequest wrapping JSON in quotesASIHTTPRequest 用引号包裹 JSON
【发布时间】:2011-06-27 14:18:15
【问题描述】:

我正在使用 ASIHTTPRequest 和 json-framework 将 JSON 发布到 Rails 应用程序,

问题是当 JSON 到达服务器时,它被双引号括起来,

这是我用来编码和发送 JSON 的代码:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/shared_lists.json",kAPIRoot]]];

    NSString *dataString = [NSString stringWithFormat:@"shared_items=%@&shared_list=%@&facebook_id=%@",[sharedItems JSONRepresentation],[sharedList JSONRepresentation],facebookID];

    NSLog(@"%@",[NSString stringWithUTF8String:[[dataString dataUsingEncoding:NSUTF8StringEncoding] bytes]]);

    [request appendPostData:[dataString dataUsingEncoding:NSUTF8StringEncoding]];
    [request setRequestMethod:@"POST"];
    [request setDelegate:self];

    [request setDidFinishSelector:@selector(requestDone:)];
    [request setDidFailSelector:@selector(requestWentWrong:)];

    [queue addOperation:request];

正确记录为:

shared_items=[{"entity_id":"531","position":"1"},{"entity_id":"733","position":"2"},{"entity_id":"723","position":"3"},{"entity_id":"2530","position":"4"}]&shared_list={"list_id":1197}&facebook_id=-1540981104

虽然当它到达服务器时输出为:

shared_items="[{"entity_id":"531","position":"1"},{"entity_id":"733","position":"2"},{"entity_id":"723","position":"3"},{"entity_id":"2530","position":"4"}]",shared_list="{"list_id":1197}",facebook_id="-1540981104"

如何停止将数组包装为单个字符串?

【问题讨论】:

  • 问题出在服务器的序列化上。

标签: iphone objective-c json asihttprequest


【解决方案1】:

试试这个方法:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/shared_lists.json",kAPIRoot]]];

NSString *dataString = [NSString stringWithFormat:@"shared_items=%@&shared_list=%@&facebook_id=%@",[sharedItems JSONRepresentation],[sharedList JSONRepresentation],facebookID];

NSMutableData *requestBody = [[NSMutableData alloc] initWithData:[dataString dataUsingEncoding:NSUTF8StringEncoding]];
[request setRequestMethod:@"POST"];
[request setPostBody:requestBody];
[request addRequestHeader:@"Content-Type" value:@"application/json; encoding=utf-8"];

[request setUseSessionPersistence:NO];
[request setUseCookiePersistence:NO];
[request setCacheStoragePolicy:ASICacheForSessionDurationCacheStoragePolicy];

【讨论】:

    【解决方案2】:

    我通过手动创建 JSON 字符串解决了这个问题,如下所示:

    NSString *dataString = [NSString stringWithFormat:@"{\"shared_items\":%@,\"shared_list\":%@,\"facebook_id\":%@}",[sharedItems JSONRepresentation],[sharedList JSONRepresentation],facebookID];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-28
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多