【问题标题】:How to prevent JSON double encoding [duplicate]如何防止 JSON 双重编码 [重复]
【发布时间】:2015-01-12 12:38:18
【问题描述】:

我在烧瓶框架的python中有这个对象:

{u'_id': ObjectId('54522c44b8f9100002223fc0'), u'streetNo': u'116', u'firstName': u'Emre', u'middleName': u'n/a', u'lastName': u'S', u'creation': datetime.datetime(2014, 10, 30, 12, 17, 8, 727000), u'email': u'dean@c.edu', u'streetName': u'Columbia'}

当我去 json.dumps(object, default=json_util.default) 时,它变成了以下内容:

'{"_id": {"$oid": "54522c44b8f9100002223fc0"}, "streetNo": "116", "firstName": "Emre", "middleName": "n/a", "lastName": "S", "creation": {"$date": 1414671428727}, "email": "dean@c.edu", "streetName": "Columbia"}'

这是双重编码的,我需要以某种方式摆脱单引号,有什么想法吗?

【问题讨论】:

  • 这个单引号告诉你这是一个字符串。
  • 试试print(json.dumps(object, default=json_util.default),它们会神奇地消失。
  • 我怀疑您的问题是您正在对 JSON 进行双重编码(通过使用 jsonify 将数据发回(或者再次使用 json.dumps)。
  • 我是这么想的,但是如果我一次都不用,那就是TypeError: ObjectId('54522c44b8f9100002223fc0') is not JSON serializable

标签: python json python-2.7 flask


【解决方案1】:

一切正常:字符串中的双引号与 JSON 预期的一样。

外部的' 引号只是表明这是Python 中的一个字符串。

所以你有一个常规字符串,其中恰好包含"。例如:'This is a string with " quotes' 在 Python 中有效,"A string the other way around with ' quotes" 也是如此。

【讨论】:

  • 同意。 json.dumps() 返回一个字符串(参见:docs.python.org/2/library/json.html#json.dumps)。这个“输出”字符串中的字符串(用单引号 '' 括起来)用双引号 "" 括起来,因为这是一个有效的(并且很棒的)Python 表示。
  • 但是当我做一个简单的 curl 例如: curl -X GET localhost:5000/api/Customers/54522c44b8f9100002223fc0 返回值将是: "{\"firstName\": \"Emre\", \"middleName\" : \"n/a\", \"lastName\": \"S\", \"creation\": 1414671428727, \"streetNo\": \"116\", \"_id\": {\" $oid\": \"54522c44b8f9100002223fc0\"}, \"email\": \"dean@c.edu\", \"streetName\": \"Columbia\"}" 表示双编码没有?
  • 如果我在 json.dumps 之前返回,我会得到:TypeError: ObjectId('54522c44b8f9100002223fc0') is not JSON serializable
猜你喜欢
  • 2020-01-04
  • 2019-09-03
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-07
  • 2014-09-20
相关资源
最近更新 更多