python之json模块

json 模块 2018/5/31

[TOC]

今日问题

  • 我希望达成的目的是:将json文件里面存储的字典内容,读取出来,转化成字符串的形式,方便提取里面的元素——因此,我想到json下面的dumps是用于将dict类型的数据,转化成str数据的一个操作方式;所以,就使用了这个方法:

代码如下:

import json
f = open('1234.json', 'r+')
data = f.read()
print(data)
j_data = json.dumps(data)
print(j_data)

输出结果为:

问题:我这里把文件中的字典类型 json了之后,为什么打印结果有   这个符号?

解决:我最开始提出的问题是:为什么我按照我上面的思路(把json文件里面的dict数据提取出来,转化成str形式),并且打印出来后,电脑会在我的字典内容之外,还加入了   这个符号。也就是这个样子。

  • 最后,我理解了:
  1. 是因为我错误的使用了dumps,这个操作是将dict转化成str后,存入文件,而不是把json文件里面的东西取出来,转化成str的操作方式;
  2. 那,为什么会出现   这个符号呢? 我现在的想法是:应该是系统的某种操作,为了让dict数据类型转化成str后能够,存入json文件的一个方式,具体为什么会加入  ,也许就是开发者的一个设计吧。

Json模块的dumps、loads、dump、load函数介绍

json.dumps()

json.dumps()用于将dict类型的数据转成str,因为如果直接将dict类型的数据直接写入json文件中会发生报错,因此在将数据写入的时候需要用到该函数。

import json
 
name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'} 

jsObj = json.dumps(name_emb)    

print(name_emb)
print(jsObj)

print(type(name_emb))
print(type(jsObj))

运行的结果如下:

{'a': '1111', 'c': '3333', 'b': '2222', 'd': '4444'}
{"a": "1111", "c": "3333", "b": "2222", "d": "4444"}
<type 'dict'>
<type 'str'>

json.loads()

json.loads()用于将str类型的数据转成dict。

import json
 
name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'} 

jsDumps = json.dumps(name_emb)    

jsLoads = json.loads(jsDumps) 

print(name_emb)
print(jsDumps)
print(jsLoads)

print(type(name_emb))
print(type(jsDumps))
print(type(jsLoads))     

运行结果如下:('a'变成了u'a'是因为发生了类型转换,str会转换成unicode)

{'a': '1111', 'c': '3333', 'b': '2222', 'd': '4444'}
{"a": "1111", "c": "3333", "b": "2222", "d": "4444"}
{u'a': u'1111', u'c': u'3333', u'b': u'2222', u'd': u'4444'}
<type 'dict'>
<type 'str'>
<type 'dict'>

json.dump()

jsom.jump()用于将dict类型的数据转换成str,并写入到json文件中。下面两种方法都可以将数据写入json文件

import json  
  
name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'}  
          
emb_filename = ('/home/cqh/faceData/emb_json.json')  


# solution 1
jsObj = json.dumps(name_emb)    
with open(emb_filename, "w") as f:  
    f.write(jsObj)  
    f.close()  
    
    
# solution 2   
json.dump(name_emb, open(emb_filename, "w"))

json.load()

json.load()用于从json文件中读取数据

import json  

emb_filename = ('/home/cqh/faceData/emb_json.json')  

jsObj = json.load(open(emb_filename))    

print(jsObj)
print(type(jsObj))

for key in jsObj.keys():
    print('key: %s   value: %s' % (key,jsObj.get(key)))

运行结果如下:

{u'a': u'1111', u'c': u'3333', u'b': u'2222', u'd': u'4444'}
<type 'dict'>
key: a   value: 1111
key: c   value: 3333
key: b   value: 2222
key: d   value: 4444

注意:json中必须使用双引号~!!!

猜你喜欢

转载自www.cnblogs.com/GGGGGGZX/p/9124128.html