将Javascript字典转换为Python字典。

4

在我的Django应用程序中,我会向视图发出Ajax调用

$.post("/metrics", {
  'program': 'AWebsite',
  'marketplace': 'Japan',
  'metrics': {'pageLoadTime': '1024'}
});

在我的 Python 代码中,我已经获得了:

@require_POST
def metrics(request):
    program = request.POST.get('program', '')
    marketplace = request.POST.get('marketplace', '')
    metrics = request.POST.get('metrics', '')
    reportMetrics(metrics, program, marketplace)

在Python中,metrics()函数应该使用这些参数调用reportMetrics()函数,然后这些参数应该放在日志文件中。但是,在我的日志文件中,我没有看到'pageLoadTime'的值——可能是因为它被传递为一个字典。将来我需要添加更多项目,因此它需要保留为一个字典(而不是像前两个一样的字符串)。
最简单的方法是将这个传入的JavaScript字典转换为Python字典?
1个回答

7
将 JavaScript 字典作为 JSON 发送,并导入 Python 的 json 模块以将其取回。您将使用 json.loads(jsonString)。 编辑 - 添加示例
$.post("/metrics", {
   data: JSON.stringify({
      'program': 'AWebsite',
      'marketplace': 'Japan',
      'metrics': {'pageLoadTime': '1024'}
   })
});

然后在Python端

import json
def metrics(request):
    data = json.loads(request.POST.get('data'))
    program = data.get('program','')
    marketplace = data.get('marketplace','')
    metrics = data.get('metrics','')

我现在没有一个好的测试方法,但我相信它应该能够工作。如果字段为空,您可能还需要进行一些检查,但我相信.get()会为您处理。


你的意思是将 {'pageLoadTime': '1024'} 改为 '{pageLoadTime: 1024}',然后再使用 json.loads() 吗? - kk1957
有一段时间没用了,但我相信你可以在 Python 中通过 data 访问所有东西,只需执行以下操作:$.post("/metrics", {data:JSON.stringify({'program':'Awebsite', ...})}) - Hoopdady
抱歉,我觉得我还没有理解。 你能给一个Python代码示例展示如何提取吗? - kk1957
我在答案中添加了Python。 - Hoopdady

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接