我目前正在做一个项目,使用javascript和python以及Jquery Datatables插件和Django。我的问题是,我正在尝试用Python语言创建一个字典,然后我希望执行一个json.dumps(字典),以便将其发送到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应采用以下格式:-
{"aaData": [[..,..,..,..,],[..,..,..,..]]}为你能提供的任何帮助干杯
克里斯
编辑:
其他信息。很抱歉没有早点把它包括进来。我用下面的方式进行编码:
返回应用程序(simplejson.dumps(Response_dict),mimetype=‘应用程序/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_ADDRESS":"00:19:a3:41:16:31","OS":"Linux","NAME":"Machine_Two"},{"STATUS":"ON","WORKGROUP":"--","IP_ADDRESS":"192.168.0.4","OS_VERSION":"8.04","MAC_ADDRESS":"00:19:b3:43:16:32","OS":"Linux","NAME":"Machine_Three"},{"STATUS":"ON","WORKGROUP":"--","IP_ADDRESS":"192.168.0.5","OS_VERSION":"8.04","MAC_ADDRESS":"00:19:c3:44:16:33","OS":"Linux","NAME":"Machine_Four"},{"STATUS":"ON","WORKGROUP":"--","IP_ADDRESS":"192.168.0.6","OS_VERSION":"8.04","MAC_ADDRESS":"00:19:d3:45:16:34","OS":"Linux","NAME":"Machine_Five"},{"STATUS":"ON",“工作组”:"--","IP_ADDRESS":"192.168.0.7","OS_VERSION":"8.04","MAC_ADDRESS":"00:19:e3:46:16:37","OS":"Linux","NAME":"Machine_Six"},{"STATUS":"ON","WORKGROUP":"--","IP_ADDRESS":"192.168.0.8","OS_VERSION":"8.04","MAC_ADDRESS":"00:19:f3:47:16:38","OS":"Linux","NAME":"Machine_Seven"},{"STATUS":"ON","WORKGROUP":"--","IP_ADDRESS":"192.168.0.9","OS_VERSION":"8.04","MAC_ADDRESS":"00:19:g3:48:16:38","OS":"Linux","NAME":"Machine_Eight"},{"STATUS":"ON","WORKGROUP":"--","IP_ADDRESS":"192.168.0.10","OS_VERSION":"8.04","MAC_ADDRESS":"00:19:h3:49:16:41","OS":"Linux","NAME":"Machine_Nine"}}
实际接受的结果为:
{"aaData":["ON","--","192.168.0.6","8.04","00:19:d3:45:16:34","Linux","Machine_Five","ON","--","192.168.0.6","8.04","00:19:d3:45:16:34","Linux","Machine_Five"]}。
我使用jQuery DataTables插件来实现这一点。我认为这个问题是错误的字典,即:我的错。我是python的新手,已经尝试过无数字典的排列,并且已经发现了10+不能做到这一点的方法,我只需要一个关于这种难以捉摸的正确方法的提示。
再次干杯
克里斯
已解决:
我已经通过从服务器返回一个数组数组(列表列表)解决了这个问题,如果您愿意的话,还可以在客户端解析它们,因为列表的大小是固定的,这不会导致性能问题。我将在以后更仔细地研究这一点,并发布一个更好的修复或更优雅的解决方案。
发布于 2011-03-29 18:28:39
你的问题中的代码没有包含我们需要了解的关键部分-如何将字典序列化为字符串。如果你只是在做str(dictionary),那是行不通的,你需要用simplejson来编码它。你可以使用easy_install安装这个库,或者如果你使用的是Python 2.6+,那么它会被包含在json中。
要将Python对象编码为JSON字符串,只需使用json.dumps(dictionary)。
您说您的Javascript代码期望一个包含嵌套列表的对象,但是您的Python代码似乎正在生成一个像{"aaData": [{..:.., ..:..},{..:.., ..:..}]}这样的对象,即,在列表中的字典中,在字典中。如果问题不在于您的编码方式,那么JSON字符串可以更清楚地了解您所期望的对象吗?
编辑
正如Ignacio Vazquez-Abrams在Python代码中所述,您正在向列表中添加字典,然后期望它们在被编码为JSON时能够神奇地转换为列表。您要么需要转换Javascript以处理当前正在发送的数据,要么将当前的Python代码替换为类似于Ignacio建议的内容。
我建议使用这些选项中的第一个,因为在使用列表表示结构时很容易出错,并且最终会因为索引错误而使用错误的值。如果你把它作为一个字典/对象,那么你就可以通过名字来访问事物,这样就避免了这个问题。
发布于 2011-03-29 18:28:47
如果它是畸形的,那么你就是在畸形它。你的意思是:
array.append([item['mac_addr'],
item['ip_addr'],
item['name'],
item['os'],
item['os_version'],
'--',
status
])发布于 2011-03-29 19:00:10
"expected“似乎是LIST中的5个项(以一种相当意外的顺序,即混乱的顺序);您正在将7个项塞入DICT --为什么??<>E29
第2步(考虑到您未宣布的编辑):
“预期数据”在列表中似乎是7(以一种相当意外的,即混乱的顺序);您正在将7个关键字:值项填充到DICT中-- 为什么??
您确定预期的数据列表应按该加扰顺序排列吗?
https://stackoverflow.com/questions/5470985
复制相似问题