2016-09-10 20 views
0

我有此JSON对象中ajax_data可变不能打印JSON对象的值在Django

{ 
    "columns[0][data]": "0", 
    "columns[1][name]": "", 
    "columns[5][searchable]": "true", 
    "columns[5][name]": "", 
    "columns[4][search][regex]": "false", 
    "order[0][dir]": "asc", 
    "length": "10", 
} 

我已经使用json.loads转换()函数等。

ajax_data = json.loads(ajax_data) 

我想要得到的值,如果 “命令[0] [DIR]” 和 “列[0] [数据]”,但如果我打印使用

ajax_data['order'][0]['dir] 

它给错误的:

KeyError at /admin/help 
'order' 

但是相同的代码工作,如果我访问它的长度键然后它的工作。

+0

你的密钥是一个字符串“[order] [0] [dir]” - 它实际上并不是一个数组。我认为这应该工作:ajax_data [“[order] [0] [dir]”]。但是如果你想使用一个实际的数组,你可能想要另一种方式来存储/访问数据。 – mcriecken

回答

1

您使用的键实际上不是一种很好的实现方式。

{ 
    "columns[0][data]": "0", 
    "columns[1][name]": "", 
    "columns[5][searchable]": "true", 
    "columns[5][name]": "", 
    "columns[4][search][regex]": "false", 
    "order[0][dir]": "asc", 
    "length": "10", 
} 

取而代之的是,你应该甲肝走了

{ 
    "columns": [ 
     {"data": "0", "name": "", "searchable": "true", "name": "", "search": { 
      "regex": "false"} 
     }, 
     {"data": "0", "name": "", "searchable": "true", "name": ""," search": { 
      "regex": "false"}}, 
     {"data": "0", "name": "", "searchable": "true", "name": "", "search": { 
      "regex": "false"}}, 
     {"data": "0", "name": "", "searchable": "true", "name": "", "search": { 
      "regex": "false"}}, 
     {"data": "0", "name": "", "searchable": "true", "name": "", "search": { 
      "regex": "false"}}, 
     {"data": "0", "name": "", "searchable": "true", "name": "", "search": { 
      "regex": "false"}}, 
    ], 
    "order": [ 
     {"dir": "asc"} 
    ], 
    "length": "10" 
} 

在这种情况下ajax_data [ '秩序'] [0] ['DIR]将导致价值 “ASC”

对于您目前执行的关键是 “为了[0] [DIR]”

即去

ajax_data["order[0][dir]"]

希望你明白这个问题。

构建json在处理API时非常重要。尝试重构你的json,这对未来也有帮助。

+0

ajax_data [“order [0] [dir]”]这是工作,但我没有创建这个结构。我正在使用metronic ajax数据表,并且有一个文件datatables.js以这种格式返回表的值。 metronic datatables插件与PHP代码兼容,但我必须在django中使用它,这就是为什么我面临一些问题。 – Pankaj

+0

好的。那很好。很高兴你得到了你的答案。 :) –

0

这是因为length是该json对象的关键,而order则不是。关键的名称是引号内的整个字符串:columns[0][data]order[0][dir]

这些都是不寻常的键名,但完全有效的。