![](/img/trans.png)
[英]Python how convert single quotes to double quotes to format as json string
[英]Python JSON change single quotes to double quotes leave in-string quotes alone
我們有以下數據框:
import pandas as pd
import numpy as np
import json
from json import JSONDecodeError
json_as_str_list = [
"[{'key1': 312, 'name': 'Simple name'}]",
"[{'key1': 981, 'name': 'Name n' quote'}]",
np.nan
]
d = {'json_as_str': json_as_str_list}
df = pd.DataFrame(data=d)
json_as_str
0 [{'key1': 312, 'name': 'Simple name'}]
1 [{'key1': 981, 'name': 'Name n' quote'}]
2 NaN
在import json_as_str
列之后是一個字符串列表,但我希望它是JSON對象列表。 我編寫了一個函數,該函數應返回給定字符串的空JSON對象的列表或給定np.nan
的空列表:
def convert_to_JSON_helper(json_str):
if isinstance(json_str, str):
json_str = json_str.replace("'", '"')
try:
return json.loads(json_str)
except JSONDecodeError:
print(json_str)
return []
else:
return []
當前實現不處理字符串中的單引號(如數據框的第二行)。 我應該如何修改該功能以使其按預期工作?
我在使用df['json_as_str'].apply(convert_to_JSON_helper)
獲得的當前輸出:
0 [{'key1': 312, 'name': 'Simple name'}]
1 []
2 []
Name: json_as_str, dtype: object
我想要的輸出:
0 [{'key1': 312, 'name': 'Simple name'}]
1 [{'key1': 981, 'name': 'Name n' quote'}]
2 []
Name: json_as_str, dtype: object
問題不是函數,而是字符串。 您鍵入了\\
來引用單引號,但是它毫無用處,因為字符串中的單個\\引用了以下字符(在這里是引號)並將其放入字符串中。 演示:
>>> a = " a 'b' 'c\'d' "
>>> a
" a 'b' 'c'd' "
反斜杠只在字符串中被吃掉了。
無論如何,您不應嘗試以一般方式轉換引號。 由於所有可能的極端情況,您將必須構建一個專用(且復雜)的解析器。 因此,我的建議是您應該在數據幀中插入正確的JSON字符串。
這是將字符串(帶有單個')轉換為dict的方法。
import ast
data = ast.literal_eval("{'a' : 12, 'c' : 'd'}")
print(data)
print(type(data))
輸出
{'a': 12, 'c': 'd'}
<type 'dict'>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.