我目前正在开发一个使用javascript和python以及jquerydatatables插件和Django的项目。我的问题是我试图用Python创建一个字典,然后我希望执行json.dumps文件(dictionary)以便将其发送到JQuery。在
转换是执行的,我可以使用调试器查看JQuery/Javascript代码中的数据,但是它没有填充我的表,原因是JSON格式不正确。我认为这是由于python代码中字典的创建方式造成的。我知道我在这一步做错了什么。我看到的所有示例都显示了一个硬编码的词典,我需要动态地创建词典。下面是我在python中使用的代码。如果有人知道我做错了什么,请让我知道这让我发疯。这是这本词典的最新排列代码:-在
dictionary = {}
array = []
status = 'OFF'
for item in self.scanResults:
if item[6]:
status = 'ON'
else:
status = 'OFF'
array.append( {'MAC_ADDRESS':item['mac_addr'],
'IP_ADDRESS':item['ip_addr'],
'NAME':item['name'],
'OS':item['os'],
'OS_VERSION':item['os_version'],
'WORKGROUP':'--',
'STATUS':status
})
dictionary = dict({'aaData': array})
JQuery端的JSON应该在格式:-在
^{pr2}$为你能提供的任何帮助干杯
克里斯
编辑:
附加信息。很抱歉没有早点把它包括进去。 我按以下方式编码:
返回HttpResponse(simplejson.dumps公司(response_dict),mimetype='application/javascript')
结果的屏幕转储为:
{“aaData”:[{“STATUS”:“ON”,“WORKGROUP”:“--”,“IP_ADDRESS”:“192.168.0.2”,“OS_VERSION”:“8.04”,“MAC_ADDRESS”:“00:10:e3:42:16:35”,“OS”:“Linux”,“NAME”:“Machine_One”},{“STATUS”:“ON”,“WORKGROUP”:“,“IP_ADDRESS”:“192.168.0.3”,“OS_VERSION”:“8.04”,“MAC_地址”:“00:19:a3:41:16:31”,“OS”:“Linux”,“NAME”:“MAC_Two”},以“工作组”为“工作组”的“工作组”:“工作组”为“工作组”的“工作组”的“工作组”的“工作组”的“工作组”的“工作组”的“工作组”的“工作组组”的“工作组组”的“工作组组”的“工作组”的“工作组”的“工作组”的“工作组”的“工作组”的“工作组”的“工作组”的“工作组”的“工作组组”的“192.168.0.5的“所能得到的版本的“能够取得的“8.04的“04的“04,“MAC的地址的地址““00:19:34:44:16:33”,“OS““““““““““““““““““的“的“的“““““““在,“工作组”:“工作组”:“工作组”的“工作组”:“192.168.0.0.6”的“工作组”的“IP”的“IP地址”的“192.168.0.6”,“OS的“U版版本”:“8.04”,“MAC的“U地址”:“00:19 19:d3:45:16:34”,“OS的““:以“Linux“的“Linux“的“““的““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““你说,“IP地址”:“192.168.0.8”,“操作系统版本”:“8.04”,“MAC\u地址”:“00:19:f3:47:16:38”,“操作系统”:“Linux”,“名称”:“机器七”},{“状态”:“开”,“工作组”:“--”,“IP地址”:“192.168.0.9”,“操作系统版本”:“8.04”,“MAC\u地址”:“00:19:g3:48:16:38”,“操作系统”:“Linux”,“名称”:“机器八”},{“状态”:“开”,“工作组”:“--”,“IP地址”:“192.168.0.10”,“操作系统版本”:“8.04”,“MAC_地址”:“00:19:h3:49:16:41”,“操作系统”:“Linux”,“名称”:“机器_九”}]}
实际评估结果为:
{“aaData”:[[“ON”,“--”,“192.168.0.6”,“8.04”,“00:19:d3:45:16:34”,“Linux”,“机器五”], [“打开”,“--”,“192.168.0.6”,“8.04”,“00:19:d3:45:16:34”,“Linux”,“机器五”]]} 只是想给你个主意。在
我使用jquerydatatables插件来实现这一点。我认为问题出在字典的格式上。我是python新手,尝试过许多字典的排列,并发现了10种以上的方法,但我只需要一个提示来说明这种难以捉摸的正确方法。在
再次欢呼
克里斯
已解决:
我已经解决了这个问题,如果您愿意的话,我从服务器返回一个数组(列表列表),并在客户端解析它们,因为列表的大小是固定的,这不会导致性能问题。我将在以后更仔细地研究这个问题,并发布一个更好的解决方案或更优雅的解决方案。在
如果它是畸形的那你就是畸形了。你是说:
“预期数据”似乎是列表中的五个项(以一个相当意外的顺序,即乱序排列);您将七个项填充到DICT中--为什么??
考虑2(考虑到你的未经宣布的编辑):
“预期数据”在列表中显示为7(以一种相当意外的方式,即乱序排列);您填充了7关键:价值项目进入一个DICT--为什么??
您确定预期的资料清单应该是以这种顺序排列的吗?在
问题中的代码不包含我们需要查看的关键位—您如何将字典序列化为字符串。如果您只是在做} 对其进行编码。您可以使用easy-install来安装这个库,或者如果您使用的是python2.6+,那么它将作为
str(dictionary)
,那么这将不起作用,您需要使用^{json
包含。在要将Python对象编码为JSON字符串,只需使用
json.dumps(dictionary)
。在你说你的Javascript代码需要一个包含嵌套列表的对象,但是你的Python代码似乎在生成一个像
{"aaData": [{..:.., ..:..},{..:.., ..:..}]}
的对象,即一个字典,一个列表,一个字典。如果问题不在于如何编码JSON字符串,那么可以更清楚地了解您所期望的对象?在编辑
正如Ignacio Vazquez Abrams在Python代码中所说的那样,您正在将字典添加到列表中,然后期望它们在编码为JSON时神奇地转换为列表。您要么需要转换Javascript来处理当前发送的数据,要么用与Ignacio建议的类似的代码替换当前的Python代码。在
我建议使用这些选项中的第一个,因为当使用列表表示结构时很容易出错,并且最终由于索引错误而使用了错误的值。如果你把它作为一个字典/对象保存,那么你就可以通过名字来访问东西,这样就避免了这个问题。在
相关问题 更多 >
编程相关推荐