【问题标题】:Parsing Python list with PHP用 PHP 解析 Python 列表
【发布时间】:2016-05-12 16:40:24
【问题描述】:

有没有办法在 PHP 中解析 Python 列表?

我有来自 python 的数据存储在 mysql 中,如下所示:

[{u'hello: u'world'}]

并且需要在 PHP 脚本中使用它。数据是一个有效的 JSON,唯一的区别是那些领先的 ​​u'

所以我可以用' 替换所有u',然后用" 替换所有' 以将其放入json。 当我替换所有内容时,如果实际值中有',它也会被" 替换并制动json。

所以.. 我尝试了很多东西,但没有一个能够解析正确的 json,因此我的问题 -> 有没有办法在 PHP 中解析 Python 生成的类似列表/json 的数据?我不介意使用一些第三方库等,只是想解析数据...

谢谢

【问题讨论】:

  • 理想情况下,您应该修复 Python 程序,以便它使用 json.dumps() 导出实际的 JSON,而不是简单地打印 Python 数据结构的 repr()
  • 正确的方法是存储正确的序列化数据。因此,当您将数据写入 mysql 时,添加序列化步骤:json.dumps(your_list_of_dicts)。在这种情况下,您不需要任何解决方法来解析任何地方的非形式化字符串。
  • 为什么它不在你的手中?任何外部 API 都不可能以这种格式返回数据,这意味着 Python 脚本必须是您或同事编写的。你或他们应该修复它。
  • 您没有访问 Python 的权限,因此您可以使用它来解析数据,然后将其转换为 PHP 可以理解的内容吗?
  • 老实说,通过一个小的 Python 脚本 是 IMO 最优雅的方式。否则,您必须在 PHP 中复制 Python 字符串文字解析器,除非绝对必要,否则我不会尝试。

标签: php python json


【解决方案1】:

如果您可以访问 python,则可以从命令行将其转换为 json。 这是一个例子。

$ echo "{u'key': u'value'}" |\
  python -c "import sys, json, ast; print(json.dumps(ast.literal_eval(sys.stdin.read())))"

{"key": "value"}

这里是 python oneliner 格式更好的版本:

import sys, json, ast
data = ast.literal_eval(sys.stdin.read())
print(json.dumps(data))

通过使用ast.literal_eval 而不是常规的eval,我们可以评估python 字典文字,而不必担心潜在的代码执行漏洞。

【讨论】:

  • eval 可以是 dangerous 以用于任意数据。对于这样的事情,使用ast.literal_eval更好。
  • 我已更改答案以包含您的建议。
  • 根据stackoverflow.com/questions/9949533/…,为什么不直接使用 json.loads 而不是 ast.literal_eval 呢?
  • @parkamark 因为输入是python文字,而不是json。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
相关资源
最近更新 更多