基本上我需要獲取一個檔案的 json 內容,替換一個變數,然后用一個新的字典附加它。我已經嘗試了各種方式并進行了搜索,但我找不到解決方案。*第一行舉例說明來自.json檔案的資料
liststr = [{"type": "divider"},{"type": "section","text": {"type": "mrkdwn","text": "Olá {user} :wave:\n\n Segue abaixo a listagem de colaboradores terceiro sob sua gest?o e a data de expira??o da conta. \n\nA data de expira??o máxima para a conta é de 30 dias. Caso o período de renova??o exceda esse limite, a data será fixada em D 30. "}}]
liststr = str(liststr)
liststr = liststr.replace("{user}", "Bruno")
listlist = json.loads(json.dumps(liststr))
print(listlist)
即使那部分作業正常。問題是,正如我所說,我需要附加更多資訊,例如:
liststr = [{"type": "divider"},{"type": "section","text": {"type": "mrkdwn","text": "Olá {user} :wave:\n\n Segue abaixo a listagem de colaboradores terceiro sob sua gest?o e a data de expira??o da conta. \n\nA data de expira??o máxima para a conta é de 30 dias. Caso o período de renova??o exceda esse limite, a data será fixada em D 30. "}}]
liststr = str(liststr)
liststr = liststr.replace("{user}", "Bruno")
listlist = json.loads(json.dumps(liststr))
listlist.append({
"user": "bruno"
})
print(listlist)
我收到錯誤訊息
“AttributeError:‘str’物件沒有屬性‘append’”
因為它認為 json.loads 變數是 str 而不是 list。我嘗試將其轉換為串列,但它也不起作用。
uj5u.com熱心網友回復:
def replace(v, needle, replacement):
if isinstance(v, str):
return v.replace(needle, replacement)
if isinstance(v, list):
return [replace(i, needle, replacement) for i in v]
if isinstance(v, dict):
return {k: replace(i, needle, replacement) for k, i in v.items()}
return v
l = [{"type": "divider"},{"type": "section","text": {"type": "mrkdwn","text": "Olá {user} :wave:\n\n Segue abaixo a listagem de colaboradores terceiro sob sua gest?o e a data de expira??o da conta. \n\nA data de expira??o máxima para a conta é de 30 dias. Caso o período de renova??o exceda esse limite, a data será fixada em D 30. "}}]
l = replace(l, '{user}', 'buno')
這就是你想要做的。遞回迭代字典串列中的所有值,并替換其中任何一個字串“{user}”,同時將所有內容保留為字典串列,而不是將所有內容轉換為字串。
uj5u.com熱心網友回復:
不確定這里的邏輯是什么,因此假設任何具有“文本”鍵且值為字串的字典都可能需要修改。如果是這樣的話:
list_ = [{"type": "divider"},{"type": "section","text": {"type": "mrkdwn","text": "Olá {user} :wave:\n\n Segue abaixo a listagem de colaboradores terceiro sob sua gest?o e a data de expira??o da conta. \n\nA data de expira??o máxima para a conta é de 30 dias. Caso o período de renova??o exceda esse limite, a data será fixada em D 30. "}}]
def process(d):
for k, v in d.items():
if isinstance(v, dict):
process(v)
else:
if isinstance(v, str) and k == 'text':
d['text'] = v.replace('{user}', 'Bruno')
break
for d in list_:
process(d)
print(list_)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/487958.html
