我正在为我的Python项目创建一个安装脚本。该脚本从json文件中读取构建配置,如下所示:
with open('setup.conf','r') as configfile:
config = json.load(configfile)
完美无缺。稍后在脚本中,我将自己约束到该对象的一部分,并将此部分写入另一个文件:
config = config[arg]
[...]
with open('kivy/app.conf','w') as appconfig:
json.dump(config,appconfig)
至少不会产生任何错误。 启动我的主应用程序后,我想读取我刚刚创建的文件:
path = os.path.dirname(os.path.abspath(__file__))
with open(path + '/app.conf','r') as configfile:
config = json.load(configfile)
然而,
失败了simplejson.scanner.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
表示json.dump()本身写的json从第一个字符开始无效。数据本身就像它可以得到的一样不可靠,所有纯ASCII字符,没有奇怪的行结尾等等。
{"deploy_server": false, "run_server": true, "server": "127.0.0.1", "run_app": true, "deploy_iOS": false, "user": "", "debug": true, "path": "", "deploy_android": false, "port": "8000"}
我不知道这可能来自哪里。非常感谢任何帮助!
更新
我发现上面的代码完全适用于实时解释器会话。我从中得出结论,围绕这个问题的代码肯定会有一些奇怪的事情,但我也在这里失去了:房间里可能有一只明显的大象,但我无法看到它。周围的代码如下所示:
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from foodcalendar import CalendarWidget
from kivy.resources import resource_add_path
import os
import requests
import json
[...]
class MyApp(App):
def __init__(self):
super(MyApp,self).__init__()
path = os.path.dirname(os.path.abspath(__file__))
print path
with open(path + '/app.conf','r') as configfile:
for r in configfile:
print r
config = json.loads(r)
self.server = config["server"]
更新2
事实证明,我面临的错误与requests
模块有某种关联:如果我评论import requests
,一切都按预期工作,但我一无所知为什么会发生这种情况,因为json
和requests
模块的文档对任何不兼容性保持沉默...
更新3
这似乎是机器相关的问题。我在另一台机器上运行我的代码,然后运行完美无缺。 Python是版本2.7.12,操作系统是Ubuntu 16.04 x86_64,内核版本是4.4.0.38-generic在两台机器上......
答案 0 :(得分:-1)
我将您提供的文本作为文件内容复制并粘贴到变量中。
>>> import json
>>> a=""" {"deploy_server": false, "run_server": true, "server": "127.0.0.1", "run_app": true, "deploy_iOS": false, "user": "", "debug": true, "path": "", "deploy_android": false, "port": "8000"}"""
>>> json.loads(a)
{'deploy_android': False, 'run_app': True, 'port': '8000', 'debug': True, 'deploy_server': False, 'server': '127.0.0.1', 'user': '', 'run_server': True, 'deploy_iOS': False, 'path': ''}
>>>
一切正常。你也可以尝试一下。如果你得到的结果与文字文本相同,那么你可以确定错误是在读取和写入文件时。你可以尝试打印'你将要提供给json.loads