2017-08-26 61 views
0

我们运行一个高度依赖位置的应用程序。所以,我们有五个模型:国家,省,区,部门,单元和村庄:从五个顶部到底部的相关表格创建JSON

我想要的是生成一个代表它们的JSON。我尝试过的东西很长,但是我注意到,因为结构是一样的,模块的一大块会显示我的问题。

所以,每个单元可以有multipe村庄里面:

cells=database.bring('SELECT id,name FROM batteries_cell WHERE sector_id=' + str(sectorID)) 
if cells: 
    for cell in cells: 
     cellID=cell[0] 
     cellName=cell[1] 
     cell_pro={'id':cellID,'name':cellName,'villages':{}} 
     villages=database.bring('SELECT id,name FROM batteries_village WHERE cell_id=' + str(cellID)) 

     if villages: 
      for village in villages: 
       villageID=village[0] 
       villageName=village[1] 
       village_pro={'id':villageID, 'name':villageName} 
       cell_pro['villages'].update(village_pro) 

但是,更新只存储每个单元的最后一个村庄。任何想法我做错了,因为我一直在尝试和删除不同的方式结束在相同的结果。

UPDATE需要输出为:

[ 

{ 
    "id": 1, 
    "name": "Ethiopia", 
    "villages": [{ 

      "vid": 1, 
      "vname": "one" 
     }, 

     { 

      "vid": 2, 
      "vname": "village two" 
     } 
    ] 

}, 


{ 

    "id": 2, 
    "name": "Sene", 
    "villages": [{ 

      "vid": 3, 
      "vname": "third" 
     }, 

     { 

      "vid": 4, 
      "vname": "fourth" 
     } 
    ] 

    } 

    ] 

回答

1

更新保持覆盖相同的密钥在cell_pro村庄字典。例如,如果village_pro为{'id':'1','name':'A'},则cell_pro['villages'].update(village_pro)将设置为cell_pro['villages']['id'] = '1'cell_pro['villages']['name'] = 'A'。循环中的下一个村庄将用别的东西覆盖ID和名称。

你可能要么想使cell_pro [“村”]到一个列表或者把它作为一个字典,并添加由ID键入的村庄:

cell_pro['villages'][villageID] = village_pro 

你想要什么格式,生成的JSON是?也许你只是想:

cell_pro['villages'][villageID] = villageName 

编辑的DESIRED JSON加入到问题:

在JSON,村庄都在数组中。为此,我们在Python中使用一个列表。请注意,cell_pro['villages']现在是一个列表,我们使用append()添加到它。

cells=database.bring('SELECT id,name FROM batteries_cell WHERE sector_id=' + str(sectorID)) 
if cells: 
    for cell in cells: 
     cellID=cell[0] 
     cellName=cell[1] 
     cell_pro={'id':cellID,'name':cellName,'villages':[]} 
     villages=database.bring('SELECT id,name FROM batteries_village WHERE cell_id=' + str(cellID)) 

     if villages: 
      for village in villages: 
       villageID=village[0] 
       villageName=village[1] 
       village_pro={'vid':villageID, 'vname':villageName} 
       cell_pro['villages'].append(village_pro) 

提示:我不知道你正在使用的数据库访问组件,但它一般不好的做法,建立SQL查询一样,因为这些参数可能无法正确逃脱,并可能导致SQL注入攻击或错误。大多数模块都有一种方法来创建具有绑定参数的查询字符串,这些绑定参数会自动安全地转义查询字符串中的变量

+0

这会给我一个JSON结构,不适合目的和坦率地说,我失去了为什么当我在一个特定的单元格和更新只有村庄的关键,这恰好是一本字典的行为。无论如何感谢伊沃。 –

+0

@NieSelam我在答案中添加了更多信息。如果这不会产生你想要的输出,让我知道你想要JSON的样子,我会告诉你如何得到它。 – ivo

+0

lemme在问题中添加需要的输出@ivo –

相关问题