Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 逐行浏览json,包括未知的嵌套数组和对象_Python_Dictionary - Fatal编程技术网

Python 逐行浏览json,包括未知的嵌套数组和对象

Python 逐行浏览json,包括未知的嵌套数组和对象,python,dictionary,Python,Dictionary,我有一个JSON字典,可以由未知对象和数组组成,但我知道需要修改哪些键 我的代码将遍历JSON文件,如果它有某些键,比如“Date”,它将执行其他任务 该代码适用于外部键,但如果存在名为“Date”的嵌套键,则将跳过它 我需要密码逐行检查所有的钥匙 代码如下 def Converttimestamp(x): format = '%Y-%m-%dT%H:%M:%S.%f' print(x) for e in x: print(e) for

我有一个JSON字典,可以由未知对象和数组组成,但我知道需要修改哪些键

我的代码将遍历JSON文件,如果它有某些键,比如“Date”,它将执行其他任务

该代码适用于外部键,但如果存在名为“Date”的嵌套键,则将跳过它

我需要密码逐行检查所有的钥匙

代码如下

def Converttimestamp(x):
    format = '%Y-%m-%dT%H:%M:%S.%f'

    print(x)

    for e in x:
        print(e)
        for column in ['JournalDate','CreatedDateUTC','UpdatedDateUTC','Date','DueDate','DeliveryDate','ExpectedArrivalDate','DateUTC']:
                if column in e:

                    ts = e[column]
                    print ("\n" + str(ts) + "\n")

                    ts_utc = re.split('\(|\)', ts)[1]
                    ts_utc = ts_utc[:ts_utc.find("+")]

                    e[column] = datetime.fromtimestamp(float(ts_utc)/1000).strftime(format)
                    print(str(e[column]))
    return(e)
JSON口述:

  x = {
        "InvoiceID": "8930",
        "InvoiceNumber": "Inv. 1",
        "Reference": "",
        "Payments": [
            {
                "PaymentID": "538",
                "Date": "/Date(1406246400000+0000)/",
                "Amount": 118.0,
                "Reference": "",
                "CurrencyRate": 1.0,
                "HasAccount": false,
                "HasValidationErrors": false
            }
        ],
        "AmountDue": 0.0,
        "AmountPaid": 118.0,
        "AmountCredited": 0.0,
        "CurrencyRate": 1.0,
        "Date": "/Date(1406246400000+0000)/",
        "DueDate": "/Date(1406246400000+0000)/"
        "UpdatedDateUTC": "/Date(1406246400000+0000)/"
    }
结果JSON字典:

      {
        "InvoiceID": "8930",
        "InvoiceNumber": "Inv. 1",
        "Reference": "",
        "Payments": [
            {
                "PaymentID": "538",
                "Date": "/Date(1406246400000+0000)/",
                "Amount": 118.0,
                "Reference": "",
                "CurrencyRate": 1.0,
                "HasAccount": false,
                "HasValidationErrors": false
            }
        ],
        "AmountDue": 0.0,
        "AmountPaid": 118.0,
        "AmountCredited": 0.0,
        "CurrencyRate": 1.0,
        "Date": "2014-06-30T02:00:00.000000",
        "DueDate": "2014-06-30T02:00:00.000000"
        "UpdatedDateUTC": "2014-12-15T14:08:51.843000"
    }
  • 日期
    列表中
    支付
    键中,因此必须通过访问列表中的字典来提取日期
资料
data=[{'AmountCredited':0.0,
“到期金额”:0.0,
“支付金额”:118.0,
“CurrencyRate”:1.0,
“日期”:“日期(1206246400000+0000)/”,
“DueDate”:日期(1306246400000+0000)/,
“发票ID”:“8930”,
“发票编号”:“1号存货”,
“付款”:[{“金额”:118.0,
“CurrencyRate”:1.0,
“日期”:“日期(1406246400000+0000)/”,
“HasAccount”:错误,
“HasValidationErrors”:False,
“PaymentID”:“538”,
'参考':'',
'TestDate':'failtest in'},
{'Amount':118.0,
“CurrencyRate”:1.0,
“日期”:“日期(1506246400000+0000)/”,
“HasAccount”:错误,
“HasValidationErrors”:False,
“PaymentID”:“538”,
'参考':'',
'TestDate':'failtest in'}],
'参考':'',
'测试日期':'失败测试',
'UpdateDateUTC':'/Date(1606246400000+0000)/',
{'amount':0.0,
“到期金额”:0.0,
“支付金额”:118.0,
“CurrencyRate”:1.0,
“日期”:“日期(1206246400000+0000)/”,
“DueDate”:日期(1306246400000+0000)/,
“发票ID”:“8930”,
“发票编号”:“1号存货”,
“付款”:[{“金额”:118.0,
“CurrencyRate”:1.0,
“日期”:“日期(1406246400000+0000)/”,
“HasAccount”:错误,
“HasValidationErrors”:False,
“PaymentID”:“538”,
'参考':'',
'TestDate':'failtest in'},
{'Amount':118.0,
“CurrencyRate”:1.0,
“日期”:“日期(1506246400000+0000)/”,
“HasAccount”:错误,
“HasValidationErrors”:False,
“PaymentID”:“538”,
'参考':'',
'TestDate':'failtest in'}],
'参考':'',
'测试日期':'失败测试',
'UpdateDateUTC':'/Date(1606246400000+0000)/']
代码
从日期时间导入日期时间
def至_iso(ts):
格式=“%Y-%m-%dT%H:%m:%S.%f”
尝试:
ts_utc=re.findall('\d+',ts)[0]
return datetime.fromtimestamp(float(ts_utc)/1000).strftime(格式)
除了(索引器、类型错误):
打印(带有“Date”的f'A键,但无法转换值:{ts})
返回ts
def convert_时间戳(我的目录列表:列表):
对于我的字典列表中的e:
#检查值不是列表的顶级键
带有日期的按键=[k代表k,e中的v.items()如果k中的'date'为'date',则键入(v)!=list]
对于带有日期的钥匙中的k1:
e[k1]=to_iso(e[k1])
#检查值为列表的顶级键
带_列表的键_=[k代表k,e.items()中的v如果类型(v)=list]
对于键中的k1和键列表:
对于枚举(e[k1])中的i,d:
对于k2,v在d.项()中:
如果k2中的“日期”:
e[k1][i][k2]=to_iso(d[k2])
返回我的目录列表
使用和输出
test=convert\u时间戳(数据)
带有“日期”的键,但无法转换值:failtest out
带有“日期”的键,但无法转换值:failtest in
带有“Date”的键,但无法转换值:failtest in
带有“日期”的键,但无法转换值:failtest out
带有“日期”的键,但无法转换值:failtest in
带有“Date”的键,但无法转换值:failtest in
打印(测试)
[{'Amount':0.0,
“到期金额”:0.0,
“支付金额”:118.0,
“CurrencyRate”:1.0,
“日期”:“2008-03-22T21:26:40.000000”,
“截止日期”:2011-05-24T07:13:20.000000,
“发票ID”:“8930”,
“发票编号”:“1号存货”,
“付款”:[{“金额”:118.0,
“CurrencyRate”:1.0,
“日期”:“2014-07-24T17:00:00.000000”,
“HasAccount”:错误,
“HasValidationErrors”:False,
“PaymentID”:“538”,
'参考':'',
'TestDate':'failtest in'},
{'Amount':118.0,
“CurrencyRate”:1.0,
“日期”:2017-09-24T02:46:40.000000,
“HasAccount”:错误,
“HasValidationErrors”:False,
“PaymentID”:“538”,
'参考':'',
'TestDate':'failtest in'}],
'参考':'',
'测试日期':'失败测试',
'UpdateDateUTC':'2020-11-24T11:33:20.000000'},
{'amount':0.0,
“到期金额”:0.0,
“支付金额”:118.0,
“CurrencyRate”:1.0,
“日期”:“2008-03-22T21:26:40.000000”,
“截止日期”:2011-05-24T07:13:20.000000,
“发票ID”:“8930”,
“发票编号”:“1号存货”,
“付款”:[{“金额”:118.0,
“CurrencyRate”:1.0,
“日期”:“2014-07-24T17:00:00.000000”,
“HasAccount”:错误,
“HasValidationErrors”:False,
“PaymentID”:“538”,