动态字典到JSON问题

2024-04-27 04:26:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在开发一个使用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种以上的方法,但我只需要一个提示来说明这种难以捉摸的正确方法。在

再次欢呼

克里斯

已解决:

我已经解决了这个问题,如果您愿意的话,我从服务器返回一个数组(列表列表),并在客户端解析它们,因为列表的大小是固定的,这不会导致性能问题。我将在以后更仔细地研究这个问题,并发布一个更好的解决方案或更优雅的解决方案。在


Tags: 代码版本ip机器字典osonaddress
3条回答

如果它是畸形的那你就是畸形了。你是说:

    array.append([item['mac_addr'],
                item['ip_addr'],
                item['name'],
                item['os'],
                item['os_version'],
                '--',
                status
    ])

“预期数据”似乎是列表中的五个项(以一个相当意外的顺序,即乱序排列);您将七个项填充到DICT中--为什么??

考虑2(考虑到你的未经宣布的编辑):

“预期数据”在列表中显示为7(以一种相当意外的方式,即乱序排列);您填充了7关键:价值项目进入一个DICT--为什么??

您确定预期的资料清单应该是以这种顺序排列的吗?在

问题中的代码不包含我们需要查看的关键位—您如何将字典序列化为字符串。如果您只是在做str(dictionary),那么这将不起作用,您需要使用^{}对其进行编码。您可以使用easy-install来安装这个库,或者如果您使用的是python2.6+,那么它将作为json包含。在

要将Python对象编码为JSON字符串,只需使用json.dumps(dictionary)。在

你说你的Javascript代码需要一个包含嵌套列表的对象,但是你的Python代码似乎在生成一个像{"aaData": [{..:.., ..:..},{..:.., ..:..}]}的对象,即一个字典,一个列表,一个字典。如果问题不在于如何编码JSON字符串,那么可以更清楚地了解您所期望的对象?在

编辑

正如Ignacio Vazquez Abrams在Python代码中所说的那样,您正在将字典添加到列表中,然后期望它们在编码为JSON时神奇地转换为列表。您要么需要转换Javascript来处理当前发送的数据,要么用与Ignacio建议的类似的代码替换当前的Python代码。在

我建议使用这些选项中的第一个,因为当使用列表表示结构时很容易出错,并且最终由于索引错误而使用了错误的值。如果你把它作为一个字典/对象保存,那么你就可以通过名字来访问东西,这样就避免了这个问题。在

相关问题 更多 >