簡體   English   中英

Python JSON將單引號更改為雙引號,不考慮字符串內引號

[英]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.

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