当前位置: 首页 > 面试题库 >

为什么解析JSON应该优先使用ast.literal_eval和json.loads?

拓拔意
2023-03-14
问题内容

我有一个字典,它以字符串形式存储在db字段中。我试图将其解析为字典,但json.loads给我一个错误。

为什么会json.loads失败并ast.literal_eval起作用?一个比另一个更好吗?

>>> c.iframe_data
u"{u'person': u'Annabelle!', u'csrfmiddlewaretoken': u'wTE9RZGvjCh9RCL00pLloxOYZItQ98JN'}"

# json fails
>>> json.loads(c.iframe_data)
Traceback (most recent call last):
ValueError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

# ast.literal_eval works
>>> ast.literal_eval(c.iframe_data)
{u'person': u'Annabelle!', u'csrfmiddlewaretoken': u'wTE9RZGvjCh9RCL00pLloxOYZItQ98JN'}

问题答案:

json.loads失败,因为您的c.iframe_data值不是有效的JSON文档。在有效json文档中,字符串用双引号引起来,并且没有类似u将字符串转换为unicode的方法

使用json.loads(c.iframe_data)方法将JSON文档反序列化c.iframe_data

ast.literal_eval在需要评估评估input表达式时使用。如果您有Python表达式作为您要评估的输入。

一个比另一个更好吗?



 类似资料:
  • 问题内容: 为什么Google会优先使用其(私有)JSON响应? 例如,这是在Google日历中打开和关闭日历时的响应: 我认为这是为了防止人们对此进行操作,但是您真正要做的就是替换,然后进行设置。我认为评估是为了确保人们编写安全的JSON解析代码。 我也曾在其他几个地方使用过此功能,但在Google(邮件,日历,通讯录等)中使用了更多功能。奇怪的是,Google Docs 以开头,而Google

  • 在我学习解析技术的过程中,解析树似乎总是以深度优先的方式遍历。 最左边的派生对应于解析树的前序遍历,而最右边的派生对应于解析树的后序遍历的相反[1] 而预序和后序遍历只是深度优先树遍历的两种特定类型[2]。 我认为原因在于普通树和解析树的区别。普通树只记录节点之间的拓扑结构,而解析树记录的不止这些。解析树还意味着父节点是在子节点上构建的,因为父节点派生到子节点的集合中。如果我们想计算解析树的根节点

  • 为什幺应该使用流 在node中,I/O都是异步的,所以在和硬盘以及网络的交互过程中会涉及到传递回调函数的过程。你之前可能会写出这样的代码: var http = require('http'); var fs = require('fs'); var server = http.createServer(function (req, res) { fs.readFile(__dirname

  • 问题内容: 之间有什么区别: 和 我知道JPanel是GUI组件的容器,但我确实看不到使用它的实用程序。当然,我错了,但我是从Swing开始的,所以…为什么我应该使用JPanel?真正的目的是什么? 问题答案: 为什么我应该使用JPanel? 您可以使用JPanel获得以下一项或多项好处: 将组件分组在一起。 为了更好地组织您的组件。 为了使我们能够使用 多种布局 并组合其效果。(例如,用于数字键

  • 问题内容: 触发服务器调用以获取componentWillMount生命周期方法中的数据是一种不好的做法? 以及为什么最好使用componentDidMount。 问题答案: 更新: componentWillMount将很快被弃用。 引用@Dan Abramov 在 React的未来版本中,我们期望componentWillMount 在某些情况下 会触发多次 ,因此您应该对网络请求使用comp

  • 问题内容: 我在服务器上有一个网站。主页为example.com/index.php。 好的,我将一个index.html命名文件上传到服务器(根目录),当我在浏览器的URL栏中键入站点的域时,感到很惊讶,因为index.html页面已加载。 (example.com-> example.com/index.html)所以不是我想要的。 我的问题:为什么会这样?为什么index.html比inde