【问题标题】:Convert python tuples to Google Maps json coordinates将 python 元组转换为 Google Maps json 坐标
【发布时间】:2017-08-23 21:22:46
【问题描述】:

我在理解将元组转换为 json 的操作顺序时遇到了一些麻烦。这是我的清单:

coordinates = [(45.62, -122.23),(45.63, -122.22),(45.64, -122.21)]

通过我的代码运行它时:

coordinates = [(45.62, -122.23),(45.63, -122.22),(45.64, -122.21)]    
coordinatesList = json.dumps(dict(coordinates))

我设法得到一个 json 数组。这是我当前的输出:

print(coordinatesList)

{"45.62": -122.23, "45.63": -122.22, "45.64": -122.21}

如您所见,我在这里遇到了多个问题。一些坐标用引号封装,而第二个值则没有。我还需要使用“lat”和“lng”附加值以适应 Google Maps api,但我对流控制的位置感到困惑。

这是我想要的输出:

       [
          {lat: 45.62, lng: -122.23},
          {lat: 45.63, lng: -122.22},
          {lat: 45.64, lng: -122.21},
        ]

【问题讨论】:

    标签: python json google-maps tuples coordinates


    【解决方案1】:

    json 键必须是字符串,所以用双引号。

    您可以使用列表解析重新组织您的数据,以生成具有正确键的字典列表,如果您想删除引号,只需使用 str.replace

    import json
    
    coordinates = [(45.62, -122.23),(45.63, -122.22),(45.64, -122.21)]
    
    result = json.dumps([{"lat":x[0],"lng":x[1]} for x in coordinates],indent=2).replace('"',"")
    

    这给了我(感谢漂亮的indent 参数):

    [
      {
        lat: 45.62,
        lng: -122.23
      },
      {
        lat: 45.63,
        lng: -122.22
      },
      {
        lat: 45.64,
        lng: -122.21
      }
    ]
    

    在这种简单的情况下,您可以在不使用 json 的情况下仅使用 str.formatstr.join 进行更多控制:

    result = "[\n{}\n]".format(",\n".join("  {{lat: {},lng: {}}}".format(*x) for x in coordinates))
    

    结果:

    [
      {lat: 45.62,lng: -122.23},
      {lat: 45.63,lng: -122.22},
      {lat: 45.64,lng: -122.21}
    ]
    

    编辑:如果您的输入实际上是一个字符串

    coordinates = "[(45.62, -122.23),(45.63, -122.22),(45.64, -122.21)]"
    

    您可以使用ast.literal_eval 安全地将其评估为python 元组列表:

    import ast
    coordinates = ast.literal_eval(coordinates)
    

    上面的代码适用。

    【讨论】:

    • result = "[\n{}\n]".format(",\n".join(" {{lat: {},lng: {}}}".format(* x) for x in coordinates)) IndexError: tuple index out of range 得到那个错误?
    • 不是您提供的示例数据,我粘贴了这些数据。如果其中一个元组中只有 1 个值,就会发生这种情况。
    • 啊,坐标列表实际上是作为字符串存储的,比如坐标 = "[(45.62, -122.23),(45.63, -122.22)"。我如何将它转换回文字以使您的解决方案起作用?
    • 你的意思是coordinates = "[(45.62, -122.23),(45.63, -122.22),(45.64, -122.21)]"
    • 是的,这就是从数据库中检索它的方式,并将其存储为字符串。我认为这就是我从您的解决方案中收到错误的原因。
    【解决方案2】:

    遍历坐标对列表并将它们转换为 JSON:

    coordinates = [(45.62, -122.23),(45.63, -122.22),(45.64, -122.21)]
    coord_list = []
    for coord_pair in coordinates:
        json_coord_pair = {}
        json_coord_pair["lat"] = str(coord_pair[0])
        json_coord_pair["lng"] = str(coord_pair[1])
        json_coord_pair = json.dumps(json_coord_pair)
        coord_list.append(json_coord_pair)
    

    【讨论】:

    • json_coord_pair["lng"] = str(coord_pair[1]) IndexError: string index out of range ?
    • 尝试复制并粘贴我的示例。我刚刚做了,它有效。
    猜你喜欢
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    相关资源
    最近更新 更多