Python:将bytes转换为json



我有这个字节类

b'ToCountry=US&ToState=WA&SmsMessageSid=SM2c04173b9a5f684be8019e177978c791&NumMedia=0&ToCity=&FromZip=&SmsSid=SM2c04173b9a5f684be8019e177978c791&FromState=&SmsStatus=received&FromCity=&Body=Bbjhggggggg&FromCountry=EE&To=%2B15095121752&ToZip=&NumSegments=1&ReferralNumMedia=0&MessageSid=SM2c04173b9a5f684be8019e177978c791&AccountSid=ACee01b40141d9e1237769375c269f4a76&From=%2B37253055607&ApiVersion=2010-04-01'

如何转换为json

一行解决方案

a = b'ToCountry=US&ToState=WA&SmsMessageSid=SM2c04173b9a5f684be8019e177978c791&NumMedia=0&ToCity=&FromZip=&SmsSid=SM2c04173b9a5f684be8019e177978c791&FromState=&SmsStatus=received&FromCity=&Body=Bbjhggggggg&FromCountry=EE&To=%2B15095121752&ToZip=&NumSegments=1&ReferralNumMedia=0&MessageSid=SM2c04173b9a5f684be8019e177978c791&AccountSid=ACee01b40141d9e1237769375c269f4a76&From=%2B37253055607&ApiVersion=2010-04-01'
dict = {e.split("=")[0]:e.split("=")[1] for e in a.decode().split("&")}
{'ToCountry': 'US', 'ToState': 'WA', 'SmsMessageSid': 'SM2c04173b9a5f684be8019e177978c791', 'NumMedia': '0', 'ToCity': '', 'FromZip': '', 'SmsSid': 'SM2c04173b9a5f684be8019e177978c791', 'FromState': '', 'SmsStatus': 'received', 'FromCity': '', 'Body': 'Bbjhggggggg', 'FromCountry': 'EE', 'To': '%2B15095121752', 'ToZip': '', 'NumSegments': '1', 'ReferralNumMedia': '0', 'MessageSid': 'SM2c04173b9a5f684be8019e177978c791', 'AccountSid': 'ACee01b40141d9e1237769375c269f4a76', 'From': '%2B37253055607', 'ApiVersion': '2010-04-01'}

使用标准模块urllib.parse,该模块也会处理%编码的符号:

from urllib.parse import parse_qsl
url = 'ToCountry=US&ToState=WA&To=%2B15095121752' # ...etc
result = dict(parse_qsl(url))

我将使用以下Python库:

  • https://docs.python.org/3/library/urllib.parse.html
  • https://docs.python.org/3/library/json.html
  • 例如:

import json
from urllib.parse import parse_qs
raw_data = b'ToCountry=US&ToState=WA&SmsMessageSid=SM2c04173b9a5f684be8019e177978c791&NumMedia=0&ToCity=&FromZip=&SmsSid=SM2c04173b9a5f684be8019e177978c791&FromState=&SmsStatus=received&FromCity=&Body=Bbjhggggggg&FromCountry=EE&To=%2B15095121752&ToZip=&NumSegments=1&ReferralNumMedia=0&MessageSid=SM2c04173b9a5f684be8019e177978c791&AccountSid=ACee01b40141d9e1237769375c269f4a76&From=%2B37253055607&ApiVersion=2010-04-01'
param_data = parse_qs(raw_data.decode())
json_data = json.dumps(param_data, indent=4)
print(json_data)

输出如下:

{
"ToCountry": [
"US"
],
"ToState": [
"WA"
],
"SmsMessageSid": [
"SM2c04173b9a5f684be8019e177978c791"
],
"NumMedia": [
"0"
],
"SmsSid": [
"SM2c04173b9a5f684be8019e177978c791"
],
"SmsStatus": [
"received"
],
"Body": [
"Bbjhggggggg"
],
"FromCountry": [
"EE"
],
"To": [
"+15095121752"
],
"NumSegments": [
"1"
],
"ReferralNumMedia": [
"0"
],
"MessageSid": [
"SM2c04173b9a5f684be8019e177978c791"
],
"AccountSid": [
"ACee01b40141d9e1237769375c269f4a76"
],
"From": [
"+37253055607"
],
"ApiVersion": [
"2010-04-01"
]
}

最新更新