【问题标题】:python dictionary convert to json not as expectedpython字典转换为json不像预期的那样
【发布时间】:2016-02-11 08:04:17
【问题描述】:

我正在使用 Django 1.8 和 python 2.7。我想将我的数据库(sqlite3)中的一些数据解析为 JSON 格式。

view.py:

def json_view(request):
    maps = Maps.objects.filter(data_id=3).values('ciudad', 'latitud', 'longitud')
    userPos = json.dumps(list(maps))
    return JsonResponse({'userPosView': userPos})

当我通过浏览器访问我的视图时,我得到:

{"userPosView": "[{\"latitud\": \"12.1363889\", \"ciudad\": \"Manague\", \"longitud\": \"-86.2513889\"}]"}

问题是 userPosView 看起来像键,其余的看起来像 userPosView 的单个值

"[{\"latitud\": \"12.1363889\", \"ciudad\": \"Manague\", \"longitud\": \"-86.2513889\"}]".

如果有人可以帮助我,我将不胜感激,因为我无法访问我的 JSON 对象上的纬度和经度值。

【问题讨论】:

  • 你可以用 json["userPosView"]["latitud"] 访问它们 你不喜欢吗?
  • 我只想指出,反斜杠 \"latitud\" 表示这被转换为 JSON 两次,而 JSON Parsers 不会将其作为真正的 JSON。 :)

标签: python json django dictionary


【解决方案1】:

为什么要在 userPosView 中添加所有 JSON?

 return JsonResponse({'userPosView': userPos}) 

你可以像这样返回创建的转储

return JsonResponse(userPos)

【讨论】:

  • 如果我这样做,我有一个错误为了允许非字典对象被序列化,请将安全参数设置为 False。
  • 所以我添加了 safe=False,但我得到的结果和往常一样:所有值看起来都像一个
  • 正如布鲁诺所说,JsonResponse 已经编码为 JSON,尝试只返回地图,像这样,返回 JsonResponse(maps)
【解决方案2】:

JsonResponse() 一直负责将其内容编码为 json,因此您最终会得到数据的双重编码 - 一个在您自己的代码中,第二个在 JsonResponse 中。解决方法很简单:在将数据传递给JsonResponse 之前,不要将数据手动编码为 json:

def json_view(request):
    maps = Maps.objects.filter(data_id=3).values('ciudad', 'latitud', 'longitud')

    return JsonResponse({'userPosView': list(maps)})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 2020-07-21
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多