1)我几天前工作了几个星期的脚本。我现在无法正确解析JSON。所以这不是新的新代码,它已经运行了好几个月。如何处理不正确的json格式? (simplejson.scanner.JSONDecodeError:期望值:第1行第1列(char 0))
2)服务网站发生了一些变化,它使JSON不合规,但我一直试图绕过这个问题没有成功。我认为这可能是一个额外的空间或什么,但我不能改变服务网站返回的信息。 3)我知道json不符合规范,因为我使用验证器(https://jsonformatter.curiousconcept.com/),通过将我需要的服务的URL与我所需的凭据/格式相结合,我得到了正确的结果,但验证失败,出现“Invalid encoding ,期待UTF-8,UTF-16或UTF-32。[代码29,结构0]“。有一种方法可以告诉验证器不要验证,Json看起来不错,但是Python不会有任何关系。当我运行我的脚本时,它会报告: simplejson.scanner.JSONDecodeError:期望值:第1行第1列(char 0)。
4)以下是我手动输入的网址和脚本。我已经混淆了所有敏感和个人信息,所以如果您尝试使用URL,将无法使用,但是当我使用非混淆格式时,我确实收到了JSON响应。
6)如果我手动打开浏览器,并把前一个真实URL(未修改),浏览器使用JSON响应。示例(混淆): {“UserId”:0,“SecurityToken”:“abcdb8c3-1ef1-1110-1234-402a914f52aa”,“ReturnCode”:“0”,“ErrorMessage”:“”,“BrandId”:2 ,“BrandName”:“Mydevicebrandname”,“RegionId”:1}
7)我能做些什么来克服这个问题?有什么建议么 ?我一直在阅读和测试,但没有运气!
8)现在脚本(模糊),基本上建立在以前的URL和提取从JSON一次性安全令牌,然后我可以在一个更大的应用程序用于其他用途:
import json,requests
APPID = 'BB8pQgg123450WHahgl12345nAkkX67890q2HrHD7H1nabcde5KqtN654321LB%2fi'
USERNAME = '[email protected]'
PASSWORD = 'mypassword'
CULTURE = 'en'
SERVICE = 'https://mystuff.mydevices.com'
def get_token_formydevices():
payload = {'appId': APPID,
'securityToken': 'null',
'username': USERNAME,
'password': PASSWORD,
'culture': CULTURE,}
login_url = SERVICE + '/Membership/SomeOtherURLrelated'
try:
r = requests.get(login_url, params=payload)
except requests.exceptions.RequestException as err:
return
data = r.json()
if data['ReturnCode'] != '0':
print(data['ErrorMessage'])
sys.exit(1)
return data['SecurityToken']
tokenneeded = get_token_formydevices()
print tokenneeded
9)当我运行以前的代码,这是我回来的:
Traceback (most recent call last):
File "testtoken.py", line 33, in <module>
tokenneeded = get_token_formydevices()
File "testtoken.py", line 26, in get_token_formydevices
data = r.json()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/models.py", line 826, in json
return complexjson.loads(self.text, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/simplejson/__init__.py", line 516, in loads
return _default_decoder.decode(s)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/simplejson/decoder.py", line 370, in decode
obj, end = self.raw_decode(s)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/simplejson/decoder.py", line 400, in raw_decode
return self.scan_once(s, idx=_w(s, idx).end())
simplejson.scanner.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
代替'r.json()',使用'r.content'或'r。文字“,所以你可以看到到底是什么被返回。我猜这将是HTML或什么都没有。如果它看起来像JSON那么发布你能在这里。 –
使用或者r.content或r.text我回来是这样的: $蟒蛇testtoken.py
[11679954572637177442] – pythonista
听起来像您的凭据已过期。也许与他们联系。 –