Tôi đã cố gắng sử dụng JSON để lưu trữ cài đặt cho một chương trình. Tôi dường như không thể có được Python 2.6 's JSON Decoder để giải mã nhiều dòng JSON chuỗi ...Đọc Python đa dòng JSON
Dưới đây là ví dụ đầu vào:
.settings file:
"""
{\
'user':'username',\
'password':'passwd',\
}\
"""
Tôi đã thử một vài cú pháp khác cho tập tin này, mà tôi sẽ chỉ định bên dưới (với traceback họ gây ra).
mã python của tôi để đọc các tập tin trong là
import json
settings_text = open(".settings", "r").read()
settings = json.loads(settings_text)
Các Traceback cho điều này là:
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)
Tôi giả sử "Extra dữ liệu" là ba báo giá.
Sau đây là các cú pháp khác tôi đã cố gắng cho các tập tin .settings, với ngược giòng trở lại của mình:
"{\
'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
Nếu tôi đặt các thiết lập trên cùng một dòng, nó giải mã tốt.
này không làm việc khi bạn tạo các chuỗi trong thông dịch viên, nhưng nó không hoạt động khi đọc từ một tập tin. –
@Paul: vì nội dung tệp của bạn không chính xác! – SilentGhost