【问题标题】:Error trying to load a JSON string in Python尝试在 Python 中加载 JSON 字符串时出错
【发布时间】:2014-06-14 21:29:24
【问题描述】:

我是 Python 新手,阅读这​​方面的内容似乎很容易,但由于某种原因,我无法调试该错误。我猜这是非常简单的事情......

2 个函数

def get_json(): return json.load(open('environment.json', 'r'))

def curlopia(j_son=get_json()): sf_url = j_son['sf_sandbox_url']['url'] grant_type = j_son['oauth_parms']['grant_type'] client_id = j_son['oauth_parms']['client_id'] client_secret = j_son['oauth_parms']['client_secret'] username = j_son['oauth_parms']['username'] password = j_son['oauth_parms']['password'] param = '-d'

我在 subprocess.call 中有一个 curl 语句,它返回一个 json 字符串。

x=subrpocess.call(["curl", sf_url, param, "grant_type=%s" % (grant_type), param, "client_id=%s" % (client_id), param, "client_secret=%s" % (client_secret), param, "username=%s" % (username), param, "password=%s" % (password)])

x=os.system('curl {0} -d "grant_type={1}" -d "client_id={2}" -d "client_secret={3}" -d "username={4}" -d "password={5}" -H "X-PrettyPrint:1"'.format(sf_url, grant_type, client_id, client_secret, username, password))

当我打印 x 时,结果是末尾的尾随零。

{"id":"https://blah@blah.blah/","issued_at":"xxxxxxxxxxx","token_type":"Bearer","instance_url":"xxxxxxxxxx","signature":"xxxxxxxxx","access_token":"xxxxxxxxxxxxx"}0

不知道为什么。

当我这样做时

json.loads(x)

给我以下错误。我也尝试过各种组合

文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/init.py”,第 326 行,加载中 返回_default_decoder.decode(s)

文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py”,第 360 行,在 decode obj, end = self.raw_decode(s, idx=_w(s, 0).end())

我试图理解为什么会有一个尾随零以及错误是否与此有关。如果是这种情况,有人可以提出解决方法,也许是正确的方法。

谢谢

【问题讨论】:

  • 您显然是在尝试加载无效的 JSON,最后的零会破坏它。不知道你在curl statement 有什么。

标签: json python-2.7


【解决方案1】:

您正在尝试加载无效的 JSON 文档。

根据你对 curl 的引用,我猜你需要通过一些 http 请求来获取这个文档。

尝试使用requests 库来获取它。

import requests
url = "http://example.com/api"
req = requests.get(url)
assert req.ok
data = req.json()
print data

您的实际案例可能需要不同的 url、方法(POST...)和可能的标题,但这些您应该已经从现有的 curl 语句中知道)

【讨论】:

  • 感谢您的回复。你对无效的 JSON 是正确的。当我在终端中使用相同的 curl 语句时,我得到了一个有效的 JSON。仅从 python 脚本返回一个无效的 JSON,当我打印从 subprocess.call 或 os.system 返回的结果时,我能够看到它。我还检查了 .json 文件的编码并尝试了 UTF-8 和 UTF-16。不幸的是,两者都产生相同的结果。我已经更新了最初的问题以反映 curl 声明。请看一下,让我知道。
  • 如果你认为我必须发布一个新问题,我会这样做。干杯
  • 虽然这不是我为解决问题所做的,但我同意回复。
猜你喜欢
  • 2017-01-22
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 2022-09-22
  • 1970-01-01
相关资源
最近更新 更多