繁体   English   中英

如何使用python在JSON数据中添加方括号

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

一些注意事项:

  1. 我正在使用python3
  2. 我正在使用list(response.keys())生成键的副本,如果没有,则稍后在迭代时更改dict时, del会出错。
  3. 魔术只是将您的问题保存到临时questions字典中,并在以后的响应中出现。
  4. 仅供参考,您会比我更了解输入,但是当键以“ Q”开头(例如“ quantity”等)时, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM