python - Django 解析具有字典的 json 请求导致错误

标签 python ios django json dictionary

我将以下 NSMutableDictionary 作为 AFNetworking 的参数从 iPhone 应用程序 (IOS 6.1) 传递到 Django 服务器

NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init];
    [parameters setObject:[self getProductDictionary] forKey:@"prodDic"];
    [parameters setObject:ApplicationDelegate.userUniqueId forKey:@"userID"];
     [manager POST:BaseURLString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {...}

-(void) getProductDictionary
{
   NSMutableDictionary *products = [[NSMutableDictionary alloc] init];
   [products setObject:@"aaa" forKey:@"prod1"];
   [products setObject:@"vvv" forKey:@"prod2"];
   [products setObject:@"bbb" forKey:@"prod3"];
}

在服务器中我有以下 View :

import json
def foo(request):
    if request.method == 'POST':
        user_id = request.POST['userID']
        products=json.loads(request.POST['prodDic'])

    return HttpResponse("Done")

以下行导致错误 products=json.loads(request.POST['prodDic']) 并且错误是:raise MultiValueDictKeyError(repr(key)) MultiValueDictKeyError: "'prodDic'"

为了调试,我删除了这一行并添加了这段代码:

 #for debug
 for key in request.POST:
    value = request.POST[key]
    print value

key 如下所示:prodDic[prod1]

我怎样才能将字典接收到产品中,这样我就可以像这样运行它:

for key in products:
   value = products[key]

最佳答案

请求对象 GET 和 POST 可以包含相同键的多个值。作为一些 HTML 表单元素,特别是 ,为同一个键传递多个值。

您正在将 request.POST 对象传递给 JSON 序列化程序,它不允许多个键具有相同的名称。所以请检查你的 request.POST 数据,看看你是否得到了多个同名的 key 。如果是,那么您必须在传递给 JSON 加载函数之前处理此数据。

希望能给大家一些解决问题的指点

关于python - Django 解析具有字典的 json 请求导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20759755/

相关文章:

python - 在本地运行 "python manage.py syncdb"时出错,但通过 Heroku 运行相同命令时没有错误

python - 如何检测 2 篇新闻文章是否具有相同的主题? (Python语言-比较)

python - 如何在 try-except 语句中使用 MergeError?

python - 使 tkinter 窗口全屏

ios - 旋转后改变棋盘颜色

ios - Swift:检查存储在 NSMutableArray 值中的 JSON 值

python - 在 Django 中,如何通过单个表单提交同时创建用户和用户配置文件

python - 为什么我可以分配 True = False (Python 2.7.9)

ios - 使用 SwiftyJSON 遍历数据

javascript - Django - 将变量传递给同一脚本标签内的javascript文件