我是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行,在加载中 return _default_decoder.decode(s)
File" /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py" ;,第360行,解码 obj,end = self.raw_decode(s,idx = _w(s,0).end())
我试图理解为什么会有一个尾随零,如果错误与此有关。如果是这样的话可以有人提出解决方法并且可能是正确的方法。
谢谢
答案 0 :(得分: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语句中知道了这些)