成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一日一技:為什么這個(gè)JSON無法解析?

開發(fā) 前端
我知道有不少同學(xué)寫代碼時(shí)喜歡使用print大法來調(diào)試,那么一定要小心這個(gè)問題。當(dāng)你定義一個(gè)字符串變量時(shí),如果有字符串需要直接寫死到代碼里面,那么你需要注意反斜杠的問題。

我們知道,Python里面,json.dumps是序列化操作,json.loads是反序列化操作。當(dāng)我使用json.dumps把一個(gè)字典轉(zhuǎn)換為字符串以后,也可以使用json.loads把這個(gè)字符串轉(zhuǎn)換為字典。

那么,有沒有可能出現(xiàn)這樣的情況:某個(gè)字典,使用json.dumps轉(zhuǎn)換成了字符串s。但是當(dāng)我使用json.loads(s)時(shí),卻會(huì)報(bào)錯(cuò)?

你別不信,我們來做一個(gè)實(shí)驗(yàn)。執(zhí)行下面這段代碼,打印出一段JSON字符串:

import json

text = '''## 摘要
這篇文章主要包含xx和yy

## 詳情
1. abc
2. def
'''

item = {'title': '關(guān)于abc', 'raw': text}
output = json.dumps(item, ensure_ascii=False)
print(output)

運(yùn)行效果如下圖所示:

圖片圖片

接下來,你把下面這個(gè)字符串復(fù)制到Python里面并使用json.loads解析:

{"title": "關(guān)于abc", "raw": "## 摘要\n這篇文章主要包含xx和yy\n\n## 詳情\n1. abc\n2. def\n"}

運(yùn)行效果如下圖所示:

圖片圖片

但如果你不是復(fù)制JSON字符串后賦值,而是直接把output反序列化,它又是正常的,如下圖所示:

圖片圖片

你以為這就很奇怪了?更奇怪的事情還在后面?,F(xiàn)在把這段有問題的JSON復(fù)制到一個(gè)文件里面,使用Python來讀取這個(gè)文本,如下圖所示:

圖片圖片

為什么現(xiàn)在又正常了?

如果你看過這篇文章:# 一日一技:怎么你的字符串跟我不一樣,那么你可以試一試使用repr來檢查一下他們有什么不同。在Jupyter里面,可以通過直接輸入變量名的方式來檢查。大家注意下圖兩個(gè)字符串的區(qū)別:

圖片圖片

當(dāng)我從文件里面讀取JSON字符串時(shí),字符串中的\n變成了\\n,所以解析正常。但是當(dāng)我直接把字符串賦值給變量時(shí),換行符是\n,于是解析失敗。

真正的關(guān)鍵,就是這個(gè)反斜杠。從文本文件里面讀取的時(shí)候,所有反斜杠都是普通的字符串。讀取文件以后使用repr查看,換行符就會(huì)變成\\n。但直接使用變量賦值的時(shí)候,\n就會(huì)變成真正的換行符號(hào),這里的\是轉(zhuǎn)義字符,不是普通字符串。

如果變量賦值時(shí),手動(dòng)使用雙反斜杠,或者在字符串前面加個(gè)r,讓反斜杠變成普通字符,那么這個(gè)JSON字符串又可以正常解析了。如下圖所示:

圖片圖片

不僅是\n,任何一個(gè)JSON字符串里面包含了反斜杠,都會(huì)有這個(gè)問題。如下圖所示:

圖片圖片

還是使用repr就能發(fā)現(xiàn)他們的差異:

圖片圖片

所以,這個(gè)問題的本質(zhì)原因,就在于當(dāng)我們使用print()函數(shù)打印一個(gè)字符串時(shí),打印出來的樣子跟這個(gè)字符串實(shí)際的樣子并不一樣。所以當(dāng)我們鼠標(biāo)選中這個(gè)打印出來的字符串并hardcode寫到代碼里面,變量賦值時(shí),這個(gè)字符串已經(jīng)不是原來的字符串了。所以當(dāng)有反斜杠時(shí),就會(huì)出現(xiàn)報(bào)錯(cuò)的情況。

我知道有不少同學(xué)寫代碼時(shí)喜歡使用print大法來調(diào)試,那么一定要小心這個(gè)問題。當(dāng)你定義一個(gè)字符串變量時(shí),如果有字符串需要直接寫死到代碼里面,那么你需要注意反斜杠的問題。當(dāng)字符串有反斜杠時(shí),要不你就在定義的前面加上r。寫成變量 = r'hardcode的字符串',要不你就把字符串先寫到文件里面,然后用Python來讀文件,獲得這個(gè)字符串,從而規(guī)避掉反斜杠的問題。

責(zé)任編輯:武曉燕 來源: 未聞Code
相關(guān)推薦

2023-10-28 12:14:35

爬蟲JavaScriptObject

2021-09-26 05:01:55

Scrapy項(xiàng)目爬蟲

2021-10-15 21:08:31

PandasExcel對(duì)象

2021-04-27 22:15:02

Selenium瀏覽器爬蟲

2025-05-28 03:15:00

Scrapy數(shù)據(jù)sleep

2021-04-12 21:19:01

PythonMakefile項(xiàng)目

2022-06-28 09:31:44

LinuxmacOS系統(tǒng)

2021-09-13 20:38:47

Python鏈?zhǔn)?/a>調(diào)用

2024-11-13 09:18:09

2021-03-12 21:19:15

Python鏈?zhǔn)?/a>調(diào)用

2021-04-05 14:47:55

Python多線程事件監(jiān)控

2021-04-19 23:29:44

MakefilemacOSLinux

2024-07-30 08:11:16

2022-03-12 20:38:14

網(wǎng)頁Python測(cè)試

2024-07-30 08:16:18

Python代碼工具

2024-11-11 00:38:13

Mypy靜態(tài)類型

2021-07-27 21:32:57

Python 延遲調(diào)用

2021-10-03 20:08:29

HTTP2Scrapy

2021-05-08 19:33:51

移除字符零寬

2024-07-19 18:23:17

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲国产aⅴ精品 | 色吧久久| 一级黄在线观看 | 亚洲国产黄 | 亚洲午夜小视频 | 日韩精品一区二区三区第95 | 久草免费在线视频 | 欧美性影院 | 天天干com| 欧美精品久久久久 | 亚洲一区导航 | 亚洲激情在线观看 | 亚洲免费一区二区 | 国产资源在线视频 | 91中文 | 在线播放中文字幕 | 91视频a| 久久99国产精品 | 成人福利视频 | 久久精品国产久精国产 | 亚洲国产成人在线 | 国产成人高清视频 | 国产中文字幕av | 亚洲国产成人精品久久久国产成人一区 | 伊人网综合| 国产精品视频免费观看 | 日日草夜夜草 | 亚洲精品一区中文字幕乱码 | 欧美日韩1区| 亚洲欧美日韩精品久久亚洲区 | 99热.com| 国产区精品| 亚洲精品福利在线 | 麻豆av在线免费观看 | 成人av免费在线观看 | 国产免费又色又爽又黄在线观看 | 在线欧美 | 美女久久久| 黄色骚片| 99热国产在线播放 | 一区二区三区av |