在Python中使用数组迭代javascript对象

在Python中使用数组迭代javascript对象,javascript,python,ajax,pyramid,Javascript,Python,Ajax,Pyramid,我有一堆文本框来获取用户的输入。当用户单击一个“完成”按钮(只是一个常规按钮)时,我获取所有输入并将其存储在关联数组中,然后将其传递给我的python方法 这就是数据的样子: 然后将其转换为json并发送到python函数: $.ajax({ url: "http://127.0.0.1:6543/create_device", type: "POST", data: JSON.stringify(data), contentTy

我有一堆文本框来获取用户的输入。当用户单击一个“完成”按钮(只是一个常规按钮)时,我获取所有输入并将其存储在关联数组中,然后将其传递给我的python方法

这就是数据的样子:

然后将其转换为json并发送到python函数:

$.ajax({
        url: "http://127.0.0.1:6543/create_device",
        type: "POST",
        data: JSON.stringify(data),
        contentType: 'application/json; charset=utf-8',
        success: function (response, textStatus, jqXHR) {
            alert("done");
        },
        error: function (jqXHR, textStatus, errorThrown) {
            //change this back to error throwing after wards
            alert("error");
        }
    });
在我的python函数中,我有以下内容:

def create_device(request):
#get the json data from the ajax call
data = request.json_body

for key in data:
    print "key: " + key
这个问题是我不确定如何迭代存储在
genericData
staticData
下的数组。当我尝试迭代它们时,它似乎只是迭代单词中的字符,而不是数组。这就是我的javascript的外观(请参阅图片以查看数据的外观):

编辑

这段代码似乎可以工作,只是我的数组是空的,我不知道如何工作

for key in data:
    for val in data[key]:
        print "-----------------" + val

在我的javascript中,我有
genericData
staticData
作为
=newarray()
。相反,我只是这样做:

    var genericData = {};
    var staticData = {};
然后其他一切都保持不变:

var data = { 'genericData' : genericData, 'staticData': staticData };
JSON.strinify(data).

现在,我的python代码可以按我所希望的那样工作。

在我的javascript中,我使用了
genericData
staticData
作为
=newarray()
。相反,我只是这样做:

    var genericData = {};
    var staticData = {};
然后其他一切都保持不变:

var data = { 'genericData' : genericData, 'staticData': staticData };
JSON.strinify(data).

现在,我的python代码可以按我所希望的那样工作。

所以您有两个数组,但使用它们作为“关联数组”、“dicts”或“objects”,这仍然很好,因为您可以在JS中为数组分配任意属性:

var a = []; // equivalent to a = new Array();
a.foo = 'boo';
但阵列始终为空:

console.log(a.foo); // prints 'boo'
console.log(a['foo']); // equivalent to the above, prints 'boo'
console.log(a.length); // 0 - the array is empty
console.log(a[0]); // undefined
因此,当它们被传递到JSON.stringify时,它只是将它们序列化为空数组:
[]
,因为,很明显,当JSON序列化程序看到一个数组时,它会将其序列化为数组,而不是对象

在您的屏幕截图上,您可以清楚地看到:您有一个长度为零的数组,其中分配了一些附加属性

那真是一种有创意的射中自己脚的方法:))

进一步阅读:

  • (很好地说明了这个问题)

所以您有两个数组,但将它们用作“关联数组”或“dicts”或“objects”,仍然可以正常工作,因为您可以在JS中为数组指定任意属性:

var a = []; // equivalent to a = new Array();
a.foo = 'boo';
但阵列始终为空:

console.log(a.foo); // prints 'boo'
console.log(a['foo']); // equivalent to the above, prints 'boo'
console.log(a.length); // 0 - the array is empty
console.log(a[0]); // undefined
因此,当它们被传递到JSON.stringify时,它只是将它们序列化为空数组:
[]
,因为,很明显,当JSON序列化程序看到一个数组时,它会将其序列化为数组,而不是对象

在您的屏幕截图上,您可以清楚地看到:您有一个长度为零的数组,其中分配了一些附加属性

那真是一种有创意的射中自己脚的方法:))

进一步阅读:

  • (很好地说明了这个问题)

您可能不应该调用
JSON.stringify()
-只需直接传递
data
(如
$.ajax()调用中的
data:data
)。如果Python使用的是对象而不是字符串,则可能需要导入JSON
data=JSON.loads(数据)
您在Python方面使用的是什么框架?对不起,我应该说明一下。我使用的是金字塔框架我添加的代码,除了我的数组似乎是空的,我不知道为什么,或者我的代码是错误的。你可能不应该调用
JSON.stringify()
-直接传递
数据
(比如,
$.ajax()
调用中的
data:data
)。检查Python是否使用对象而不是字符串,您可能需要导入json和
data=json。加载(数据)
您在Python方面使用的是什么框架?对不起,我应该说明这一点。我使用的是金字塔frameworkI添加的代码,只是我的数组似乎是空的,我不知道为什么,或者我的代码是错误的。所以你有两个数组,但使用它们作为“关联数组”、“dicts”或“objects”,这仍然很好,因为你可以在JS:
var a=[]中为数组分配任意属性;a、 foo='boo'
。但是数组总是空的,所以当它们被传递到
JSON.stringify
时,它只是将它们序列化为空数组:
[]
,因为很明显,当JSON序列化程序看到一个数组时,它会将其序列化为数组,而不是对象。。。这是一种创造性的方法,可以射自己的脚:))当我在控制台中检查数组时,当它到达
JSON.stringify时,数组并不是空的,那时数组看起来是空的,但直到那时它们才包含数据。我这样分配它们:
genericData[strippedName]=value
我扩展了我的注释,并将其作为一个单独的答案添加,因此您有两个数组,但将它们用作“关联数组”或“dicts”或“objects”,这仍然可以很好地工作,因为您可以在JS中为数组分配任意属性:
var a=[];a、 foo='boo'
。但是数组总是空的,所以当它们被传递到
JSON.stringify
时,它只是将它们序列化为空数组:
[]
,因为很明显,当JSON序列化程序看到一个数组时,它会将其序列化为数组,而不是对象。。。这是一种创造性的方法,可以射自己的脚:))当我在控制台中检查数组时,当它到达
JSON.stringify时,数组并不是空的,那时数组看起来是空的,但直到那时它们才包含数据。我这样分配它们:
genericData[strippedName]=value
我扩展了我的注释并将其作为单独的答案添加