我正在使用 python 3.6.3a。我想為每個 json 記錄生成有效負載。我正在使用每個變數來訪問記錄。如何each在有效載荷中分配變數值(在這種情況下)?我試過{each}和其他方法,但沒有奏效。
下面的代碼片段。
json_records = [{"description":"<p>This is scenario1<\/p>","owner":"deb",
"priority":"high"},
{"description":"<p>This is scenario2<\/p>","owner":"deb",
"priority":"medium"}]
json_object = json.loads(json_records)
for each in json_object:
payload = """
{
"subject": "test",
"fieldValues": [
{each}
]
}
"""
uj5u.com熱心網友回復:
有兩種方法可以解決這個問題。一種方法是創建一個dict() 物件并根據需要插入鍵,然后json.dumps(object)將其轉換為字串有效負載,如下所示:
import json
json_records = [{"description":"This is scenario1</p>","owner":"deb","priority":"high"}
,{"description":"This is scenario2</p>","owner":"deb","priority":"medium"}]
for obj in json_records:
payload = dict()
payload['subject'] = 'test'
for key,value in obj.items():
payload['fieldName'] = {
key:value
}
print(json.dumps(payload))
#{"subject": "test", "fieldName": {"priority": "high"}}
#{"subject": "test", "fieldName": {"priority": "medium"}}
第二種方法是從字串創建文本有效負載,但是如果最后需要一個有效的 JSON,這將需要驗證的后期步驟(類似于try json.loads(payload) - 所以我只使用第一種方法。僅當我有特定要求以某種方式生成有效負載時,我才會使用此方法。
import json
json_records = [{"description":"This is scenario1</p>","owner":"deb","priority":"high"}
,{"description":"This is scenario2</p>","owner":"deb","priority":"medium"}]
# json_object = json.loads(json_records) # json.loads works only on byte-like strings. your object is already in python in this case.
for obj in json_records:
payload = """
{
"subject": "test",
"fieldValues": [
%s
]
}
""" % (obj["priority"])
print(payload)
#{
# "subject": "test",
# "fieldValues": [
# high
# ]
# }
#
#
# {
# "subject": "test",
# "fieldValues": [
# medium
# ]
# }
uj5u.com熱心網友回復:
您可以創建payload一個Template字串并使用它來將每個 JSON 記錄中的資料放入您想要的格式。括號{}字符在Templates 中沒有特殊含義,這使得它們易于使用。
這樣做將創建一個包含所有內容的字典的有效字串表示。您可以使用該ast.literal_eval()函式將其轉換為實際的 Python 字典資料結構,然后將其轉換為 JSON 字串格式——我認為這是您所追求的最終格式。
rom ast import literal_eval
import json
from string import Template
from textwrap import dedent
json_records = '''[{"description":"<p>This is scenario1<\/p>","owner":"deb",
"priority":"high"},
{"description":"<p>This is scenario2<\/p>","owner":"deb",
"priority":"medium"}]'''
json_object = json.loads(json_records)
payload = Template(dedent("""
{
"subject": "test",
"fieldValues": [
$each
]
}""")
)
for each in json_object:
obj = literal_eval(payload.substitute(dict(each=each)))
print(json.dumps(obj, indent=2))
輸出:
{
"subject": "test",
"fieldValues": [
{
"description": "<p>This is scenario1</p>",
"owner": "deb",
"priority": "high"
}
]
}
{
"subject": "test",
"fieldValues": [
{
"description": "<p>This is scenario2</p>",
"owner": "deb",
"priority": "medium"
}
]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/397737.html
下一篇:如何在沒有此錯誤的情況下將ASP.NetWebapi連接到Angular錯誤:嘗試比較“[objectObject]”時出錯。只允許陣列和可迭代物件
