将 Javascript 字典转换为 python 字典

kk1*_*957 3 javascript python dictionary

在我的 Django 应用程序中的某个位置,我对我的视图进行了 Ajax 调用

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

在我的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)
Run Code Online (Sandbox Code Playgroud)

python 中的函数metrics()应该reportMetrics()使用这些参数进行调用,然后这些参数应该进入日志文件。但在我的日志文件中,我没有看到“pageLoadTime”值 - 可能是因为它是作为字典传入的。将来我需要向其中添加更多项目,因此它需要保留为字典(而不是像前两个那样的字符串)。

将传入的 javascript 字典转换为 python 字典的最简单方法是什么?

Hoo*_*ady 5

将 javascript 字典作为 json 发送并导入 pythonjson模块以将其拉出。您将使用 json.loads(jsonString)。

编辑 - 添加示例

$.post("/metrics", {
   data: JSON.stringify({
      'program': 'AWebsite',
      'marketplace': 'Japan',
      'metrics': {'pageLoadTime': '1024'}
   })
});
Run Code Online (Sandbox Code Playgroud)

然后在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','')
Run Code Online (Sandbox Code Playgroud)

我现在还没有一个好的方法来测试这个,但我相信它应该有效。您可能还需要检查某个字段是否为空,但我相信.get()会为您处理。