詳しくは【json&pickle】dumps,loads,dump,loadの違い

2040 ワード

1 json.dumps()
json.dumps()は、辞書タイプを文字列タイプに変換します.
import json
 
name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'} 
jsObj = json.dumps(name_emb)    
 
print(name_emb)
print(jsObj)

2 json.dump()
json.dump()dictタイプのデータをstrに変換して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"))

3 json.loads()
json.loads()文字列タイプを辞書タイプに変換
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)

4 json.load()
json.load()はjsonファイルからデータを読み出すために使用されます.
# json_load.py 
strList = json.load(with open("listStr.json",mode='r')) 
print strList 
print strDict 
# {u'city': u'\u5317\u4eac', u'name': u'\u5927\u5218'} 
  • pickle共通操作参照json
  • フォーマット要件:
  • はint/str/list/dict/bool/floatのみを含むタプル/セット
  • は存在しない.
  • 最外層は、リストまたは辞書
  • である必要があります.
  • jsonに文字列がある場合は、二重引用符「jsonの文字列」
  • でなければなりません.
  • 真偽小文字true/false
  • 辞書またはリストに中国語が存在し、シーケンス化するときはUNcode形式に移行するが、中国語を保存するには以下の操作が必要である
    v1=[1,2,3,4,'2','  ']
    val = json.dumps(v1,ensure_ascii=False)
    print(val)     #[1, 2, 3, 4, "2", "  "]
  • json:利点:すべての言語が通用し、欠点:一部のデータ型をシーケンス化するしかない.連続loadできない
  • pickle;複数のデータをシーケンス化できますが、シーケンス化後はpythonのみ認識され、連続してloadで
  • を複数回連続することができます.
    まとめ:dumpとjsonの変換時にファイル操作を結合することができ、dumpsとjsonsはできない.