簡體   English   中英

使用正則表達式從Python中的JSON響應中提取數據

[英]Using regex to extract data from JSON response in Python

我正在嘗試使用Python中的正則表達式從JSON響應中提取字符串,但沒有成功。

{"ao":["jskl|_xx2|020|b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===|true|900"]}

我想要的

b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA=== 

從字符串。 但是, | 在字符串中將不允許我使用我在Stack Overflow上看到的方法,因為它一直缺少| 我將不勝感激任何幫助。

在這里,你可以轉義字符類中的特殊字符:

import re
text = '{"ao":["jskl|_xx2|020|b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===|true|900"]}'


match = re.search(r'[|]b.*===[|]', text).group()[1:-1]
print(match)

輸出:

b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===

沒有必要用正則表達式重新發明json.loads() 使用json.loads()將您的JSON字符串解析為字典,並通過索引到字典中來訪問您感興趣的字符串。 解壓縮字符串后,拆分管道字符並訪問列表的第三個索引:

your_json_dict_name["ao"][0].split("|")[3]

這是一個完整的例子:

import json

raw_json_str = r'{"ao":["jskl|_xx2|020|b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===|true|900"]}'
json_dict = json.loads(raw_json_str)

print(json_dict["ao"][0].split("|")[3])

輸出:

b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===

好吧,對於初學者我不太明白你為什么不在這個字符串上使用json.loads,所以你可以將這個json稱為地圖並轉到“ao”鍵,並在數組內的字符串上使用正則表達式。

但是把它放在一邊,如果你仍然要從json中提取數據作為字符串,你可以在“|”上使用正則表達式組和一些轉義(“\\”) 字符。

哪個看起來像這樣:

?[\\“(。 ?\\ |){3}(。 ?)\\ |。

然后你可以訪問第2組並得到你想要的結果,這總是讓json看起來一樣

如果“ao”屬性上的數組有超過1個字符串,則不會獲得第二個值。 因此我想建議先將這個字符串轉換為map,然后自己循環每個字符串。

祝好運

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM