2015-11-16 58 views
0
import json 

data1 = {'b': 789, 'c': 456, 'a': 123} 

encode_line = json.dumps(data1) 
decode_json = json.loads(encode_line) 

print type(encode_line) 
print type(decode_line) 

類型(decode_line)是[字典],但是當我們保存DATA1到txt文件,並且使用下面的腳本閱讀:的Python:變換[STR]類型JSON數據到[字典]類型

file = open('test.txt','r') 
for line in file: 
    encode_line = json.dumps(line) 
    decode_line = json.loads(encode_line) 

    print type(encode_line) 
    print type(decode_line) 

現在,類型(decode_line)是[unicode]。爲什麼?

我想從txt文件讀取數據,然後從字典類型中檢索信息。我應該怎麼做 ?

謝謝!

回答

0

嗨!

這應該做的伎倆:

import json; 

def readJSON(filename): 
    "Reads JSON file, returns correspoding dict."; 
    with open(filename) as f: 
     return json.loads(f.read()); 

工作原理:

json.dumps(.) Python的字典轉換成JSON字符串。
json.loads(.)將JSON字符串轉換爲Python字典。

在您的代碼中,您可以撥打json.dumps(line),但line是一個字符串!
要使json.dumps(.)正常工作,您必須提供一個Python字典,而不是字符串。

在這種情況下,dumps被讀爲「dump-s」,「s」爲字符串。它需要一個字典和轉儲(即返回)它是字符串表示。同樣,loads被讀爲「load-s」。它加載(即接受)一個JSON字符串並返回相應的字典。

希望這會有所幫助。

+0

謝謝。是的,我想從一個txt文件中得到一個Python字典,但是失敗了。文件內容爲{'b':789,'c':456,'a':123} {'b':753,'c':446,'a':223} – noteahp

+0

由於文本文件不包含有效的JSON。 JSON使用雙引號分隔鍵,而不是單引號。另外,應該有一個JSON對象;在你的文件中,似乎有兩個。你是否試圖處理多個由換行符分隔的JSON對象? –

+0

感謝您的幫助。雙引號是問題。是的,在txt文件中有30000多行JSON格式的表單,我想要檢索一行的部分信息。 – noteahp

0

從第二片段刪除以下行

encode_line = json.dumps(line)

(你在哪裏讀文件)

file = open('test.txt','r') 
for line in file: 
    decode_line = json.loads(line) 
    print type(line) 
    print type(decode_line) 

看到https://docs.python.org/2/library/json.html

+0

我們得到以下錯誤:回溯(最近呼叫最後): 文件「F:/v-fengxw/PycharmProjects/untitled/yyyy.py」,第21行,在 decode_line = json.loads(line) File 「F:\ Python27 \ lib \ json \ __init__.py」,第338行,載入中 return _default_decoder.decode(s) 解碼中的文件「F:\ Python27 \ lib \ json \ decoder.py」,第366行 obj,end = self.raw_decode(s,idx = _w(s,0).end()) 文件「F:\ Python27 \ lib \ json \ decoder」。py「,第382行,在raw_decode obj,end = self.scan_once(s,idx) ValueError:期望屬性名稱:第1行第2列(char 1) – noteahp

+0

什麼是文件內容? – naresh

+0

謝謝.txt文件內容{'b':789,'c':456,'a':123} {'b':753,'c':446,'a':223} – noteahp

相關問題