接收并循环遍历python中的json数据

时间:2016-01-11 09:09:19

标签: python json flask

我有一个JSON数据,我使用AJAX发送到我的服务器。数据来到这里,我看到了。

def add_collection(self):
        form = AccountForm.LoginForm(request.form)
        if self.request.method == 'GET' :
            return render_template('add_collection.html',user=current_user,formLogin = form)
        elif self.request.method == 'POST' :
            for data in self.request.data :
                print "The data is %s" %data

当我打印self.request.data时,我得到了我的JSON

    [{"image":"https://mybucket.s3.amazonaws.com/asma.jpg","Description":"Photo Descriptiong"},
{"image":"https://mybucket.s3.amazonaws.com/NCg3G.png","Description":"Photo Description"}]'

以上就是我的JSON文件的样子和我期待的内容。但是,我想将它分成两行并插入数据库。请问我如何循环JSON。我见过类似的问题here等等。但是,没有一个适合我。我试过的时候

 for data in self.request.data :
                print data['image']
  

TypeError:字符串索引必须是整数,而不是str

请问我该如何实现这一目标?任何帮助都将不胜感激。

以下是我的ajax请求。

$.ajax({
                url: "/user/add_collection",
                type: 'POST',
                contentType:'application/json',
                data: JSON.stringify(arr),
                dataType:'json',
                success : function(data,status){
                    console.log("The image upload data returns", data);
                    console.log("the image upload status is", status);
                },
                error : function(xhr, ajaxOptions, thrownError){
                    //$.mobile.loading('hide');
                    if (xhr.status == 200) {
                        alert(ajaxOptions);
                    }
                    else {
                        alert(xhr.status);
                        alert(thrownError);
                    }
                }
            });

我正在使用python运行flask框架。

2 个答案:

答案 0 :(得分:3)

我认为您将响应作为字符串(self.request.data)。 要将其视为对象,首先需要将其转换为(从字符串到python表示):

    elif self.request.method == 'POST' :
        parsed_json = json.loads(self.request.data)
        for data in parsed_json:
            print data['image']

答案 1 :(得分:2)

JSON数据以字符串形式接收。你需要先解析它。

data = json.loads(self.request.data)