【发布时间】:2015-12-02 01:32:02
【问题描述】:
我有一个 Python Web API,它返回一个带有“u”前缀而不是标准双引号的 JSON。
我希望能够使用 RapidJSON document.Parse(string) 函数在 C++ 中解析它,但是 Python 格式阻止 RapidJSON 将其验证为正确的 JSON。
正确格式化 JSON 并删除使用 RapidJSON 解析的前缀的最佳方法是什么?
以下是我想使用 RapidJSON 解析的字符串,但是 IsObject() 断言失败(假设 RapidJSON 无法解析 Python 格式的 unicode JSON 字符串)。
{u'artist': u'Death Grips', u'track': u'Hunger Games', u'import_date': datetime.datetime(2015, 12, 1, 4, 6, 23), u'track_id': u'TRUCCPM1515BB84DDF-0', u'codever': u'4.12', u'length': 159, u'score': 4.8918204, u'source': u'local', u'release': u'No Love Deep Web'}
谢谢!
编辑:
原来我的响应不是 JSON,而是 Python 字典。由于不受支持的类型 (datetime.datetime),dict 上的 json.dumps 失败。我使用
删除了有问题的条目del response.metadata[u'import_date'];
然后执行json.dumps(response.metadata) 工作正常并返回一个 JSON。
【问题讨论】:
-
你确定它是 JSON 而不是 Python 对象表示法吗?
-
这是一个很好的观点,在我的 Python API 中返回响应之前,我将研究作为 JSON 的编码......我尝试简单地对对象执行 json.dumps 但它完全破坏了我的服务器响应.
标签: python c++ json unicode rapidjson