Python读取多行JSON

Python读取多行JSON,python,json,Python,Json,我一直在尝试使用JSON来存储程序的设置。我似乎无法让Python2.6的JSON解码器解码多行JSON字符串 以下是示例输入: .settings file: """ {\ 'user':'username',\ 'password':'passwd',\ }\ """ 我已经为这个文件尝试了几个其他语法,我将在下面指定它们(以及它们引起的回溯) 我在中读取文件的python代码是 import json settings_text = open(".settings", "r").

我一直在尝试使用JSON来存储程序的设置。我似乎无法让Python2.6的JSON解码器解码多行JSON字符串

以下是示例输入:

.settings file:
"""
{\
  'user':'username',\
  'password':'passwd',\
}\
"""
我已经为这个文件尝试了几个其他语法,我将在下面指定它们(以及它们引起的回溯)

我在中读取文件的python代码是

import json
settings_text = open(".settings", "r").read()
settings = json.loads(settings_text)
对此的回溯是:

Traceback (most recent call last):
  File "json_test.py", line 4, in <module>
    print json.loads(text)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/__init__.py", line 307, in loads
    return _default_decoder.decode(s)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/decoder.py", line 322, in decode
    raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 1 column 2 - line 7 column 1 (char 2 - 41)
回溯(最近一次呼叫最后一次):
文件“json_test.py”,第4行,在
打印json.loads(文本)
文件“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/_init__.py”,第307行,在loads中
返回\u默认\u解码器。解码
decode中的文件“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/decoder.py”,第322行
raise VALUERROR(errmsg(“额外数据”,s,end,len)))
ValueError:额外数据:第1行第2列-第7行第1列(字符2-41)
我假设“额外数据”是三重引用

以下是我为.settings文件尝试的其他语法,以及它们各自的回溯:

"{\
  'user':'username',\
  'pass':'passwd'\
}"

Traceback (most recent call last):
  File "json_test.py", line 4, in <module>
    print json.loads(text)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/__init__.py", line 307, in loads
    return _default_decoder.decode(s)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/decoder.py", line 319, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/decoder.py", line 336, in raw_decode
    obj, end = self._scanner.iterscan(s, **kw).next()
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/scanner.py", line 55, in iterscan
    rval, next_pos = action(m, context)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/decoder.py", line 155, in JSONString
    return scanstring(match.string, match.end(), encoding, strict)
ValueError: Invalid \escape: line 1 column 2 (char 2)



'{\
  "user":"username",\
  "pass":"passwd",\
}'

Traceback (most recent call last):
  File "json_test.py", line 4, in <module>
    print json.loads(text)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/__init__.py", line 307, in loads
    return _default_decoder.decode(s)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/decoder.py", line 319, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/decoder.py", line 338, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
”{\
'用户':'用户名'\
“pass”:“passwd”\
}"
回溯(最近一次呼叫最后一次):
文件“json_test.py”,第4行,在
打印json.loads(文本)
文件“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/_init__.py”,第307行,在loads中
返回\u默认\u解码器。解码
文件“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/decoder.py”,第319行,在decode中
obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
文件“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/decoder.py”,第336行,原始解码
obj,end=self.\u scanner.iterscan(s,**kw).next()
iterscan中的文件“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/scanner.py”,第55行
rval,next_pos=动作(m,上下文)
JSONString中的文件“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/decoder.py”,第155行
返回扫描字符串(match.string,match.end(),编码,严格)
ValueError:无效\转义:第1行第2列(字符2)
'{\
“用户”:“用户名”\
“通行证”:“通行证”\
}'
回溯(最近一次呼叫最后一次):
文件“json_test.py”,第4行,在
打印json.loads(文本)
文件“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/_init__.py”,第307行,在loads中
返回\u默认\u解码器。解码
文件“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/decoder.py”,第319行,在decode中
obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
文件“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/decoder.py”,第338行,原始解码
raise VALUERROR(“无法解码JSON对象”)
ValueError:无法解码任何JSON对象
如果我把所有的设置放在一行上,它就可以解码了

>>> s = """
{
  "user":"username",
  "password":"passwd"
}
"""
>>> json.loads(s)
{'password': 'passwd', 'user': 'username'}

JSON不认为<代码> \/C>是一个行连续字符。

清除所有反斜杠和设置文件中的所有“Python”引用。如果文件只是:

{
  "user":"username",
  "password":"passwd"
}
还要注意,JSON字符串是用双引号引起来的,而不是单引号。请参见此处的JSON规范:

尝试使用eval(s)

s=”“” {\ '用户':'用户名'\ “password”:“passwd”\ \ “”“

ss=评估(q)

qq {'password':'passwd','user':'username'}

类型(qq) 口述


当您在解释器中创建字符串时,它确实起作用,但从文件读取时它不起作用。请不要使用eval-