[英]How to add square brackets in JSON data with python
所以我有看起來像這樣的json數據:
"responses":[
{
"ResponseID" : "R_1mhpDCQzIOlVfPT",
"ResponseSet" : "Default Response Set",
"IPAddress" : "",
"StartDate" : "2016-08-04 11:52:36",
"EndDate" : "2016-08-04 11:52:53",
"RecipientLastName" : "",
"RecipientFirstName" : "",
"RecipientEmail" : "",
"ExternalDataReference" : "",
"Finished" : "1",
"Status" : "1",
"Q5" : "",
"Q6" : "",
"Q7" : "",
"Q8" : "",
"Q9" : "",
"Q10" : "",
"Q11" : "",
"Q12" : "",
"LocationLatitude" : "33.414794921875",
"LocationLongitude" : "-111.90930175781",
"LocationAccuracy" : "-1"
},
我基本上想將所有Q都放入json中的Questions數組中。 輸出應如下所示:
"responses":[
{
"ResponseID" : "R_1mhpDCQzIOlVfPT",
"ResponseSet" : "Default Response Set",
"IPAddress" : "",
"StartDate" : "2016-08-04 11:52:36",
"EndDate" : "2016-08-04 11:52:53",
"RecipientLastName" : "",
"RecipientFirstName" : "",
"RecipientEmail" : "",
"ExternalDataReference" : "",
"Finished" : "1",
"Status" : "1",
"Questions" : [
"Q5" : "",
"Q6" : "",
"Q7" : "",
"Q8" : "",
"Q9" : "",
"Q10" : "",
"Q11" : "",
"Q12" : ""
],
"LocationLatitude" : "33.414794921875",
"LocationLongitude" : "-111.90930175781",
"LocationAccuracy" : "-1"
}
我該如何處理並將其應用於100多個回復。 這是我到目前為止的內容:
for filename in os.listdir('C:/Users/john/Desktop/Q/QD'):
if filename.endswith(".json") :
print(filename)
with open(filename, encoding="utf8") as data_file:
data = json.load(data_file)
for i in data['responses']:
for j in i:
if j.startswith('Q'):
print(j)
input("Press enter to continue...")
這些代碼要做的就是加載數據,並基本上遍歷文件夾中的每個文件,並將所有問題打印到控制台中。 我該如何追加問題字段並添加方括號?
這是一個工作示例:
for filename in os.listdir('C:/Users/john/Desktop/Q/QD'):
if filename.endswith(".json"):
with open(filename, encoding="utf8") as data_file:
data = json.loads(data_file)
for response in data['responses']:
questions = {}
for key in list(response.keys()):
if key.startswith('Q'):
questions[key] = response[key]
del response[key]
response['Questions'] = questions
print(response)
一些注意事項:
list(response.keys())
生成鍵的副本,如果沒有,則稍后在迭代時更改dict時, del
會出錯。 questions
字典中,並在以后的響應中出現。 startswith
可能會導致您出現問題 我是Python的新手,必須首先與驗證JSON對抗,但是這樣的工作可行嗎?
給定輸入:
{
"responses": [{
"ResponseID": "R_1mhpDCQzIOlVfPT",
"ResponseSet": "Default Response Set",
"IPAddress": "",
"StartDate": "2016-08-04 11:52:36",
"EndDate": "2016-08-04 11:52:53",
"RecipientLastName": "",
"RecipientFirstName": "",
"RecipientEmail": "",
"ExternalDataReference": "",
"Finished": "1",
"Status": "1",
"Q5": "",
"Q6": "",
"Q7": "",
"Q8": "",
"Q9": "",
"Q10": "",
"Q11": "",
"Q12": "",
"LocationLatitude": "33.414794921875",
"LocationLongitude": "-111.90930175781",
"LocationAccuracy": "-1"
}]
}
使用此代碼:
import json
def main():
f = open('test.json')
a = json.load(f)
print a.keys()
qs = []
for k in a[u'responses'][0]:
if 'Q' in k:
qs.append((k, a[u'responses'][0][k]))
del k
a[u'responses'][0]['questions'] = qs
print a
if __name__ == "__main__":
main()
給出以下輸出:
{u'responses': [{u'Q5': u'', u'Q7': u'', u'Q6': u'', u'Q9': u'', u'Q8': u'', u'ResponseID': u'R_1mhpDCQzIOlVfPT', u'LocationLatitude': u'33.414794921875', u'RecipientLastName': u'', 'questions': [(u'Q5', u''), (u'Q7', u''), (u'Q6', u''), (u'Q9', u''), (u'Q8', u''), (u'Q11', u''), (u'Q10', u''), (u'Q12', u'')], u'Status': u'1', u'StartDate': u'2016-08-04 11:52:36', u'EndDate': u'2016-08-04 11:52:53', u'RecipientEmail': u'', u'Finished': u'1', u'Q11': u'', u'Q10': u'', u'Q12': u'', u'IPAddress': u'', u'RecipientFirstName': u'', u'LocationAccuracy': u'-1', u'LocationLongitude': u'-111.90930175781', u'ExternalDataReference': u'', u'ResponseSet': u'Default Response Set'}]}
您需要針對您的用例進行調整。
順便說一下,我正在使用Python 2.7。 老實說,以前的解決方案看起來要優雅得多。 我發布了更多內容以嘗試幫助和學習。 隨時指出我的錯誤!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.