TJ *_*dle 2 python json dictionary eval abstract-syntax-tree
我正在使用ast.literal_eval将我从json.loads()收到的数据更改为Python字典; 然而,如果我只是以一种完全不同的方式来解决这个问题 - 请随意指出这一点.
# Authentication
buf = StringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL, "https://kippt.com/api/account")
c.setopt(c.WRITEFUNCTION, buf.write)
c.setopt(c.HTTPHEADER, header)
c.perform()
result = buf.getvalue()
buf.close()
print result
# Printing Output
data_string = json.dumps(result)
jsonload = json.loads(data_string)
jsondict = ast.literal_eval(jsonload)
Run Code Online (Sandbox Code Playgroud)
目前它可以正常使用一行JSON返回,例如:
{"username":"my_username","api_token":"my_api_token"}
我可以通过以下方式正确获取值:
print jsondict['username']
print jsondict['api_token']
Run Code Online (Sandbox Code Playgroud)
我遇到问题的部分是数据嵌套的时候,例如:
{"meta":{"next":null,"total_count":6,"previous":null,"limit":20,"offset":0},"objects":[{"rss_url":"https: //kippt.com/feed/username_here/stuff_here/cool-stuff","updated":"1339003710","title":"Cool Stuff","created":"1339001514","slug":"cool-stuff" ",""id":54533,"resource_uri":"/ api/lists/54533 /"},{"rss_url":"https://kippt.com/feed/username_here/stuff_here/programming","updated": "1339003479","title":"Programming","created":"1339001487","slug":"programming","id":54532,"resource_uri":"/ api/lists/54532 /"},{ "rss_url":"https://kippt.com/feed/username_here/stuff_here/android","updated":"1339003520","title":"Android","created":"1339000936","slug": "android","id":54530,"resource_uri":"/ api/lists/54530 /"},{"rss_url":"https://kippt.com/feed/username_here/stuff_here/chrome","已更新":"1339000931","title":"Chrome","created":"1339000412","slug":"chrome","id":54529,"resource_uri":"/ api/lists/54529 /"} ,{"rss_url":"https://kippt.com/feed/use rname_here/stuff_here/inbox","updated":"1338946730","title":"收件箱","已创建":"1338945940","slug":"inbox","id":54432,"resource_uri":"/api/lists/54432 /"},{"rss_url":"https://kippt.com/feed/username_here/stuff_here/read-later","updated":"1338945940","title":"稍后阅读",""创建":"1338945940","slug":"read-later","id":54433,"resource_uri":"/ api/lists/54433 /"}]}
当我使用相同的代码(/ api/lists的Exchange URL)时,运行脚本时出现以下错误:
回溯(最近一次调用最后一次):文件"kippt.py",第48行,在jsondict = ast.literal_eval(jsonload)文件"/usr/local/lib/python2.7/ast.py",第80行,在literal_eval中return _convert(node_or_string)文件"/usr/local/lib/python2.7/ast.py",第63行,在zip中的_convert(node.keys,node.values)中)文件"/ usr/local/lib/python2 .7/ast.py",第62行,返回dict((_ convert(k),_ convert(v))for k,v File"/usr/local/lib/python2.7/ast.py",第63行,在zip中的_convert(node.keys,node.values)中)文件"/usr/local/lib/python2.7/ast.py",第62行,返回dict((_ convert(k),_ convert(v) )对于k,v文件"/usr/local/lib/python2.7/ast.py",第79行,在_convert引发ValueError('malformed string')ValueError:格式错误的字符串
任何帮助,将不胜感激.谢谢!
看起来我的第一个输入可能被解释为Python语法,这是我的错误所在,因为从技术上来说,即使使用它也没有以正确的方式开始.
我现在只想json.loads()我的结果来自cURL,而不是做我之前做过的搞砸事情.
例如:
buf = StringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL, "https://kippt.com/api/lists")
c.setopt(c.WRITEFUNCTION, buf.write)
c.setopt(c.HTTPHEADER, header)
c.perform()
result = buf.getvalue()
buf.close()
print result
# Printing Output
jsonload = json.loads(result)
print jsonload['meta']['total_count'] # Gets the total_count item in the meta object.
Run Code Online (Sandbox Code Playgroud)
ast.literal_eval 嵌套字典没有问题:
>>> ast.literal_eval("{'a': {'b':'c'}}")
{'a': {'b': 'c'}}
Run Code Online (Sandbox Code Playgroud)
ast.literal_eval因为数据实际上是JSON ......而且JSON不是有效的Python.具体来说,null不是有效的Python文字.
为什么不只是json.loads()用来加载数据?
| 归档时间: |
|
| 查看次数: |
6277 次 |
| 最近记录: |