簡體   English   中英

Python讀取多行JSON

[英]Python read multiline JSON

我一直在嘗試使用JSON存儲程序的設置。 我似乎無法獲得Python 2.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)

我假設“額外數據”是三引號。

這是我為.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

如果我將所有設置都放在一行上,它會很好地解碼。

除去設置文件中的所有反斜杠和所有“ Pythonic”引號。 如果文件只是正常工作:

{
  "user":"username",
  "password":"passwd"
}

還要注意,JSON字符串用雙引號而不是單引號引起來。 請參閱JSON規范:

http://www.json.org/

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

json不將\\視為行繼續符。

嘗試使用評估

s =“”“ {\\'user':'用戶名',\\'password':'passwd',\\ \\”“”

ss = eval(q)

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

類型(qq)字典

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM