【问题标题】:C++/RapidJSON: Removing unicode Python prefix from JSON string for parsingC++/RapidJSON:从 JSON 字符串中删除 unicode Python 前缀以进行解析
【发布时间】: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


【解决方案1】:

这仍然不是一个有效的 JSON。您可以使用http://jsonlint.com/ 或类似工具来验证 JSON。 RapidJSON 只能处理符合 RFC7159/ECMA-404 的 JSON。

【讨论】:

    猜你喜欢
    • 2019-05-30
    • 2013-02-26
    • 2011-05-08
    • 1970-01-01
    • 2011-10-15
    • 2017-03-22
    • 1970-01-01
    • 2015-05-09
    • 2023-04-05
    相关资源
    最近更新 更多