在Python中与JSON库嵌套

时间:2019-03-14 20:55:16

标签: python json

我正在努力使自己的Python代码能够为我的JSON消息输出正确的嵌套和格式。我的问题是我无法按照给出示例JSON的方式将对象嵌套在JSON中,因为这只是源系统将如何接受它。我已经在线阅读了文档和其他教程,但找不到任何解决该问题的方法。

这是我必须使用的示例JSON,并且包含正确的格式:

    {"messageId": "ID,"messageType": "Type","createdDateTime": "2019-01-01T10:10:10Z","recordOne": [{"dataItemOne": "E123345","dataItemTwo": "2019-01-01T12:12:12Z","attributesRecord": {"attributesOne": 22,"attributesTwo": 24,},"recordTwo": {"dataItemOne": "L22","dataItemTwo": "EL","dataItemThree": "ADDFES334S",},"recordThree": [{"itemOne": "P44587"}]}]}

这是我的代码

import datetime
import json

datetime = datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ")

data = {'messageId': 'ID',
        'messageType': 'Type',
        'createdDateTime': datetime}

data1 = {'recordOne': []}

data1['recordOne'].append({
    'dataItemOne': 'E123345',
    'dataItemTwo': datetime,
})

datas = [data, data1]

with open('mata.json', 'w') as outfile:
    data = json.dumps(data)
    json.dump(datas, outfile)

这提供了我这种类型的JSON:

    [{"messageId": "ID","messageType": "Type","createdDateTime": "2019-03-14T20:31:55Z"}, {"recordOne": [{"dataItemOne": "E123345","dataItemTwo": "2019-03-14T20:31:55Z"}]}]

我的主要问题是我无法将文件输出到:

  • 仅以大括号开头,即{“ messageId”:“ ID”而不是[{“ messageId”:“ ID”
  • 我无法将recordOne格式化为“ recordOne”:[{
  • 然后将输出attributeRecord记录为recordOne下的“ attributesRecord”:{
  • 然后在attributeRecords下的Nest字段
  • 记录recordTwo和recordThree我只能创建一个对象

有人可以帮我吗,请问我是菜鸟吗?

注意-为了解决这个问题,我创建了一个单独的脚本,该脚本打印了正确的嵌套和格式,但是我很费力并被告知要使用该库,我知道该库存在局限性,因此不确定其中之一。

1 个答案:

答案 0 :(得分:2)

看看下面的代码

import datetime
import json

dt = datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ")

data = {'messageId': 'ID',
        'messageType': 'Type',
        'createdDateTime': dt}

data['recordOne'] = [{
    'dataItemOne': 'E123345',
    'dataItemTwo': dt
}]

# since recordOne contains a list, we use [0] to paste stuff inside it
data['recordOne'][0]['attributesRecord'] = {
    'attributesOne': 22,
    'attributesTwo': 24
}

data['recordTwo'] = {
    ...
}

# and so on and so forth

with open('mata.json', 'w') as outfile:
    json.dump(data, outfile)

要摆脱的主要问题是,如果要向字典中添加某些内容,只需编写data['recordOne']data['recordOne'][0]['attributesRecord']即可创建一个新键,而在此同时,也可以为其分配所需的值。

如果要保留嵌套,则只需继续添加键级别。请记住,如果要将字典放入列表中,则必须使用它们各自的索引(例如[0])访问列表内的键值对

由于您的某些词典也必须在列表中,因此我将其添加为此类(请参阅第一个data['recordOne'])。

最后,json.dumps()用于创建字符串,而json.dump()用于写入文件。所以用那个。希望这会有所帮助!