【问题标题】:iphone Json POST request to Django server creates QueryDict within QueryDict对 Django 服务器的 iphone Json POST 请求在 QueryDict 中创建 QueryDict
【发布时间】:2011-02-04 11:21:46
【问题描述】:

我正在使用 JSON 库从 Objective C 创建一个 JSON POST 请求,如下所示:

NSMutableURLRequest *请求; request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/%@/", host, action]]]; [请求 setHTTPMethod:@"POST"]; [请求 setValue:@"application/json-rpc" forHTTPHeaderField:@"Content-Type"]; NSMutableDictionary *requestDictionary = [[NSMutableDictionary alloc] init]; [requestDictionary setObject:[NSString stringWithString:@"12"] forKey:@"foo"]; [requestDictionary setObject:[NSString stringWithString@"*"] forKey:@"bar"]; NSString *theBodyString = requestDictionary.JSONRepresentation; NSData *theBodyData = [theBodyString dataUsingEncoding:NSUTF8StringEncoding]; [请求设置HTTPBody:theBodyData]; [[NSURLConnection alloc] initWithRequest:request delegate:self];

当我在 Django 视图中读取此请求时,调试器显示它获取了整个 JSON 字符串并将其作为 POST QueryDict 的第一个键:

POST QueryDict: QueryDict: {u'{"foo":"12","bar":"*"}': [u'']}> 错误无法解析变量

我可以读取第一个密钥,然后使用 JSON 作为 hack 重新解析。但是为什么没有正确发送 JSON 字符串?

【问题讨论】:

    标签: iphone objective-c django json


    【解决方案1】:

    这是处理带有 json 数据的 POST 请求的方式:

    def view_example(request):
        data=simplejson.loads(request.raw_post_data)
    
        #use the data
    
        response = HttpResponse("OK")
        response.status_code = 200
        return response 
    

    【讨论】:

      【解决方案2】:

      我已经处理过这个问题。我在阅读request.body dict 时找到了一个临时解决方案。我假设您已经导入了 json/simplejson 库。 在我看来:

      post = request.body
      post = simplejson.loads(post)
      foo = post["foo"]
      

      此代码块帮助我通过发布问题。我认为在request.POST 中发布querydict 尚未在NSMutableURLRequest 上正确开发。

      【讨论】:

        【解决方案3】:

        解决我的问题的残酷技巧是:

        hack_json_value = request.POST.keys()[0] hack_query_dict = json.loads(hack_json_value) foo = hack_query_dict['foo'] bar = hack_query_dict['bar']

        所以这将允许我在服务器端通过额外的步骤来提取两个 JSON 值。但它应该一步到位。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-10-21
          • 2016-02-05
          • 2016-07-19
          • 1970-01-01
          • 2012-04-19
          • 2022-01-16
          • 1970-01-01
          相关资源
          最近更新 更多