0

我已经尝试了类似帖子的所有建议,但没有运气。我有一个项目列表,用于为字典列表创建值。该列表最终成为一个 JSON 对象,因此我不能在添加到它的每个列表项周围加上单引号。

metrics = ["test_met_1","test_met_2","test_met_3","test_met_4","test_met_5"]
data = {
    "reportDescription":{
        "reportSuiteID":"some_suite",
        "dateFrom":"yesterday",
        "dateTo":"today",
        "dateGranularity": "day",
        "metrics":[]
        }
    }

if len(metrics) > 0:
    for metric in metrics:
    new_met = "{\"id\""+":"+"\""+metric+"\"}"
    data["reportDescription"]["metrics"].append(new_met)

if len(elements) > 0:
    for element in elements:
        new_elm = "{\"id\""+":"+"\""+element+"\",\"top\""+":"+"\"50000\""+"}"
    data["reportDescription"]["elements"].append(new_elm)

log_file = open('test.JSON','a')
log_file.write('\n\n'+str(datetime.now())+'\n'+str(data))
log_file.close()

我的结果:

{'reportDescription':'dateGranularity': 'day', 'dateTo': 'today', 'dateFrom': 'yesterday', 'metrics': ['{"id":"test_met_1"}', '{"id":"test_met_2"}', '{"id":"test_met_3"}', '{"id":"test_met_4"}', '{"id":"test_met_5"}'], 'reportSuiteID': 'some_suite'}

我真正需要的:

{"reportDescription":"dateGranularity": "day", "dateTo": "today", "dateFrom": "yesterday", "metrics": [{"id":"test_met_1"}, {"id":"test_met_2"}, {"id":"test_met_3"}, {"id":"test_met_4"}, {"id":"test_met_5"}], "reportSuiteID": "some_suite"}

关于如何删除每个列表项周围的那些单引号的任何想法?我已经尝试了 join() 和/或 replace() 的几种变体。虽然没有运气。

4

2 回答 2

1

如果要创建 JSON 字符串(或文件),请使用该json模块。

>>> data["reportDescription"]["metrics"] = [{"id": m} for m in metrics]
>>> json.dumps(data)
'{"reportDescription": {"metrics": [{"id": "test_met_1"}, {"id": "test_met_2"}, {"id": "test_met_3"}, {"id": "test_met_4"}, {"id": "test_met_5"}], "dateFrom": "yesterday", "dateGranularity": "day", "reportSuiteID": "some_suite", "dateTo": "today"}}'

要直接写入文件,请使用json.dump(data, log_file). 该json模块将负责正确转义字符串并使用正确的 JSON 引号等。

于 2016-07-18T15:04:58.863 回答
0

得到结果字典后,使用 json.dumps(yourdict) 将其转换为 json 对象

不要忘记导入 json

确保你的字典很好。

于 2016-07-18T14:58:27.040 回答