您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 > 

01 訂閱鏈接轉yaml在線解析json字符(pytest測試框架-數據驅動 yaml/excel/csv/json)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-05-04 09:44:07【】0人已围观

简介python3對象|字典|json|yaml|字符串相互轉化在研究k8s的yaml配置文件的時候,我總擔心自己一不小心會寫錯,所以我向往使用將對象序列化yaml的形式,其實pythonobject可以

python3 對象 |字典|json|yaml|字符串 相互轉化

在研究 k8s 的yaml 配置文件的時候,我總擔心自己一不小心 會寫錯,所以我向往 使用將對象 序列化 yaml 的形式,

其實 python object 可以 直接 轉 yaml ,甚至也可以 直接 轉成yaml文件!!!

這里 會經常用到幾個 函數 vars() ast.

我們先嘗試用最笨的方法 實現 object到yaml 的轉化

在python對象 買粉絲nvert to dict 的形式,使用 vars()函數

然后 dict 買粉絲nvert to json 使用 json.mps(dict)函數

然后 json 買粉絲nverte to yaml 使用 ya= yaml.load(json.mps(dict)) 然后

再 yaml.safe_mp(ya,default_flow_style=False)

至此我們看到 從 python Object ---> dict ----> json ---> yaml 的轉化

其中 obj dict json yaml 轉 string ,只要 str()函數即可,或者 str(vars())結合

yaml 格式 寫入到文件 ,需要注意的是, open()函數 的mode 一定要是 'w' ,不能是’wb', b代表是二進制寫入

yaml 寫入的是dict str,使用 ‘wb' 會報錯,[yaml TypeError: a bytes-like object is required, not 'str']

【出現該錯誤往往是通過open()函數打開文本文件時,使用了‘rb’屬性,如:fileHandle=open(filename,'rb'),則此時是通過二進制方式打開文件的,所以在后面處理時如果使用了str()函數,就會出現該錯誤,該錯誤不會再python2中出現。

具體解決方法有以下兩種:

第一種,在open()函數中使用‘r’屬性,即文本方式讀取,而不是‘rb’,以二進制文件方式讀取,可以直接解決問題。

第二種,在open()函數中使用‘rb’,可以在使用之前進行轉換,有以下實例,來自: 買粉絲://stackoverflow.買粉絲/questions/33054527/python-3-5-typeerror-a-bytes-like-object-is-required-not-str 】

其實 python object 可以 直接 轉 yaml ,甚至也可以 直接 轉成yaml文件!!!

比如我已經定義了一個 Dog python class,他有 好幾個屬性 并已經賦值初始化了

另外生成 yaml 對象

生成yaml文件

結果是

反過來 yaml ----> json ---> 持久化 json 文件 indent=1屬性是為了讓 json 不以單行展示,而是展開

注意的是 python 的 dict 和set 很相似 ,都是 { }, set 里是list, dict 是鍵值對

【# set object is not JSON serializable [plicate]

打開 demo.json

yaml ---> dict

yaml ---> python object

json --> dict

json.loads()

dict--> json

json.jumps()

str ---> dict

newdict=dict(str)

json -- > python object

一個python object無法直接與json轉化,只能先將對象轉化成dictionary,再轉化成json;對json,也只能先轉換成dictionary,再轉化成object,通過實踐,源碼如下:

yaml --> python object

對yaml,也只能先轉換成json --->dictionary,再轉化成object,通過實踐,源碼如下:

dict -- ->python object

python對象 默認都有一個 私有的屬性 dict 取值 就是 object的 字典形式, 賦值就就可以給對象屬性對應賦值

例如json 轉 對象

對象 轉 json

Python之dict(或對象)與json之間的互相轉化

在Python語言中,json數據與dict字典以及對象之間的轉化,是必不可少的操作。

dict字典轉json數據

對象轉json數據

json數據轉成dict字典

json數據轉成對象

json的load()與mp()方法的使用

mp()方法的使用

超越XML和JSON:YAML,Java開發人員的新選擇

為Java開發者對YAML文件格式做一個高級介紹 找出它與XML和JSON的不同之處 并檢驗它的優越性和缺陷

所有動態語言(如Ruby Groovy Python等)及其相關的框架(如Ruby on rails)百家爭鳴 盡管閱讀本文的大部分Java開發者每天的大多數工作都是處理純粹的Java 且未來多年都將如此 但這并不意味著他們不能學習新的知識 在他們的兵器庫中添加新的兵器 本文介紹YAML(YAML不是標記語言的簡寫)文件格式(使用Ruby on rails框架進行講解 因為它所有的配置文件都是使用的YAML)以及它與XML和JSON的區別 最后討論了YAML的優勢和缺點

空格縮進和JSON選項

YAML文件格式主要集中于空格縮進的概念 它用于指出數據的層次結構 – 而不是使用XML嵌套標記或JSON的大括號({ })和方括號([]) 實際上 它是JSON的一個超集 因此 在使用的時候 你可能需要采用JSON風格的語法來跳出空格流 它的創始人將其形容為 為所有編程語言提供人性化的數據序列化標準 以我的經驗來看 其重點是人性化 下面是一個使用空格縮進的YAML樣例 創建YAML文件時不宜使用固定寬度字體 因為空格是很關鍵的 (參考側邊欄 YAML和標簽

JFrame: defaultCloseOperation: JFrame EXIT_ON_CLOSE title: Test Frame width: height: ponents: JTextArea: name: textArea text: | This is a really long text that spans multiple lines (but preserves new lines) It does not need to be escaped with special brackets CDATA tags or anything like that JButton: name: button text: Button

側邊欄 YAML和標簽     基于空格縮進的任一文件格式最常見的問題之一是如何解釋標簽 在這個YAML例子中 答案相當簡單 它不支持標簽 使用標簽字符縮進代替空格將會導致處理異常

隨你喜歡 你可以在任何節點使用JSON風格語法或混合語法 例如 上面的例子可改為

JFrame: defaultCloseOperation: JFrame EXIT_ON_CLOSE title: Test Frame width: height: ponents: JTextArea: name: textArea text: | This is a really long text that spans multiple lines (but preserves new lines) It does not need to be escaped with special brackets CDATA tags or anything like that JButton: { name: button text: Button } #JSON風格語法

在底層節點(即它們沒有子節點 正如你猜測的那樣 井號鍵在YAML中是用來注釋的)切換使用JSON風格語法顯得特別有用

YAML結構組件

前面已經看了一個簡單的YAML例子 下面讓我們一起來了解一下YAML的結構 hash list 和block literal

hash(散列)

通過縮進子段和在關鍵字與值之間使用冒號(:)來分割實現hash的創建 如

JFrame: defaultCloseOperation: JFrame EXIT_ON_CLOSE title: Test Frame width: height:

還有一種方法就是使用與JSON兼容的大括號語法({ })語法 每一對關鍵字/值使用逗號( )分割 如

JFrame: { defaultCloseOperation: JFrame EXIT_ON_CLOSE title: Test Frame

width: height: }

list(清單)

通過在每個list元素前放一個減號( )來創建list 與空格縮進一起構成了YAML的基石

ponents: JTextArea Jbutton

還有一種方法就是使用JSON兼容的方括號([])語法 如

ponents: [JTextArea JButton]

block literal(文字塊)

這是YAML的亮點 特別是與XML相比 它的CDATA顯得相當簡陋 block literal可以將大塊文本細致地插入文件中 你可以使用豎線(|)指令在你的文本中保留新行 如

text: | This is a really long text that spans multiple lines (but preserves new lines) It does not need to be escaped with special brackets CDATA tags

很赞哦!(682)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款的名片

职业:程序员,设计师

现居:江苏徐州沛县

工作室:小组

Email:[email protected]