Python pyodbc:解析JSON列表是错误的

时间:2017-05-28 09:28:16

标签: python sql json pyodbc

我正在解析来自Yelp的JSON响应:

{
  "businesses": [
    {
      "id": "gaumont-wilson-toulouse-2",
      "name": "Gaumont Wilson",
      "city": "Toulouse"           
       }
    {
      "id": "la-cinémathèque-de-toulouse-toulouse",
      "name": "La Cinémathèque de Toulouse",
      "city": "Toulouse"
       }
    {
      "id": "abc-toulouse",
      "name": "ABC",
      "city": "Toulouse"
       }
  ]
}

我写了我的Python代码:

for element in response_data['businesses']:
    SQL_ID = element['id']
    SQL_Name = element['name']
    SQL_City = element['city']
    cursor.execute("INSERT INTO Yelp (ID, Name, City) values (?,?,?)", (SQL_ID,SQL_Name,SQL_City))
    connection.commit()

但结果是Python只是通过了最后的业务,而不是前两个:

enter image description here

为什么?

2 个答案:

答案 0 :(得分:1)

您是否使用json.loads()加载了json?如果你没有,请尝试以下方法。

import json

reponse_data_json = json.loads(response_data)
for element in response_data_json['businesses']:
    SQL_ID = element['id']
    SQL_Name = element['name']
    SQL_City = element['city']
    cursor.execute("INSERT INTO Yelp (ID, Name, City) values (?,?,?)", (SQL_ID,SQL_Name,SQL_City))
    connection.commit()

答案 1 :(得分:0)

您的数据不是有效的json格式,我做了一些改动以添加','在每个{}之后,然后您可以检索以下所有内容,在python 3.6下测试代码

 data =  {
  "businesses": [
     {
       "id": "gaumont-wilson-toulouse-2",
       "name": "Gaumont Wilson",
       "city": "Toulouse"           
     },

     {
       "id": "la-cinémathèque-de-toulouse-toulouse",
       "name": "La Cinémathèque de Toulouse",
       "city": "Toulouse"
      },
    {
       "id": "abc-toulouse",
       "name": "ABC",
       "city": "Toulouse"
       },
  ]
}

 jsonobject = json.dumps(data)

 jsonobjectToString = json.loads(jsonobject)
 for resp in jsonobjectToString['businesses']:
     print(resp['id'])
     print(resp['name'])
     print(resp['city'])

=======

  gaumont-wilson-toulouse-2
  Gaumont Wilson
  Toulouse
  la-cinémathèque-de-toulouse-toulouse
  La Cinémathèque de Toulouse
  Toulouse
  abc-toulouse
  ABC
  Toulouse