深入理解Python對Json的解析_python

不言
發布: 2018-04-02 17:26:05
原創
1451 人瀏覽過

Json是一種常用的資料交換結構,由於輕量、易於閱讀和編寫等特點,在網路方面應用很廣。以下這篇文章主要介紹了Python對Json解析的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。

Json簡介

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。它是基於JavaScript(Standard ECMA-262 3rd Edition - December 1999)的子集。 JSON採用完全獨立於語言的文字格式,但也使用了類似C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的資料交換語言。易於人閱讀和編寫,同時也易於機器解析和生成。

它的格式一般是這樣的:

物件是一個無序的「『名稱/值』對」集合。一個物件以「{」(左括號)開始,「}」(右括號)結束。每個「名稱」後面跟著一個「:」(冒號);「『名稱/值' 對」之間使用「,」(逗號)分隔。

例如下面這樣:


{"b": "Hello", "c": null, "a": true}
登入後複製


它的值可以是雙引號括起來的字串(string)、數值(number)、true、false、 null、物件(object)或陣列(array)。這些結構可以嵌套。


值(value)可以是雙引號括起來的字串(string)、數值(number)、true、false、 null、物件(object)或數組(array)。這些結構可以嵌套。

使用Python編碼和解析Json

Python內建了json套件來幫助我們完成對json的操作。

將Python的字典結構導出到json使用json.dumps() ,將json讀成Python的字典結構,使用json.loads()

如果不是針對string操作而是對檔案操作,分別使用json.load()函數和json.dump()函數。


import json
 
data = {
 'name' : 'ACME',
 'shares' : 100,
 'price' : 542.23
}
 
json_str = json.dumps(data)
data = json.loads(json_str)
 
# Writing JSON data to file
with open('data.json', 'w') as f:
 json.dump(data, f)
 
# Reading data back
with open('data.json', 'r') as f:
 data = json.load(f)
登入後複製


預設的類型對應如下:


arraystring##number (int )int, longnumber (real)floattrueTrue
JSONPython
#object#dict
list
unicode

false

False

null


None


#其他資料型別與Json之間的編碼與解碼


#一般來說,Python對json的解析是list或dict之間的操作,如果需要其他型別與json之間轉換,就需要object_hook參數。先定義一個類,將類別的字典初始化成json的key-value鍵值對。這樣,json的參數就變成了類別的屬性。

將一個JSON字典轉換為Python物件Python

#
>>> class JSONObject:
...  def __init__(self, d):
...   self.__dict__ = d
...
>>>
>>> data = json.loads(s, object_hook=JSONObject)
>>> data.name
'ACME'
>>> data.shares
50
>>> data.price
490.1
登入後複製



也可以透過指定「函數”來進行轉換。

用函數來指定序列化的方法,即將物件的「屬性-值」對變成字典對,函數傳回一個字典,然後

json.dumps會格式化這個字典。

如果是透過函數將json變成對象,先得到類別名,然後透過

__new__來建立一個物件(不呼叫初始化函數),然後將json字典的各個屬性賦給對象。

使用函數指定json轉換方式Python


#

def serialize_instance(obj):
 d = { '__classname__' : type(obj).__name__ }
 d.update(vars(obj))
 return d
 
# Dictionary mapping names to known classes
classes = {
 'Point' : Point
}
 
def unserialize_object(d):
 clsname = d.pop('__classname__', None)
 if clsname:
  cls = classes[clsname]
  obj = cls.__new__(cls) # Make instance without calling __init__
  for key, value in d.items():
   setattr(obj, key, value)
  return obj
 else:
  return d
登入後複製


使用方法如下:

######
>>> p = Point(2,3)
>>> s = json.dumps(p, default=serialize_instance)
>>> s
'{"__classname__": "Point", "y": 3, "x": 2}'
>>> a = json.loads(s, object_hook=unserialize_object)
>>> a
<__main__.Point object at 0x1017577d0>
>>> a.x
2
>>> a.y
3
登入後複製
#############相關推薦:#########Python對JSON的解析詳解#### #########Python對Json字串判斷的方法實例############# 深入理解python對json的操作總結############ #########################

以上是深入理解Python對Json的解析_python的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板