2015-11-16 57 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

相关问题