在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","createdDateTime": "2019-03-14T20:31:55Z"},{"recordOne": [{"dataItemOne": "E123345","dataItemTwo": "2019-03-14T20:31:55Z"}]}]

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

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

谁能帮我,请问我是菜鸟吗?

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

最佳答案
看一下下面的代码

import datetime
import json

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

data = {'messageId': 'ID','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()用于写入文件.所以用那个.希望这对您有所帮助!

相关文章

使用OpenCV实现视频去抖 整体步骤: 设置输入输出视频 寻找帧...
前言 对中文标题使用余弦相似度算法和编辑距离相似度分析进行...
前言 之前尝试写过一个爬虫,那时对网页请求还不够熟练,用的...
前言 本文使用Python实现了PCA算法,并使用ORL人脸数据集进行...
前言 使用opencv对图像进行操作,要求:(1)定位银行票据的...
天气预报API 功能 从中国天气网抓取数据返回1-7天的天气数据...