0

我的最终输出 JSON 文件采用以下格式

    [
     {
    "Type": "UPDATE",
    "resource": {
        "site ": "Lakeside mh041",
        "name": "Total Flow",
        "unit": "CubicMeters",
        "device": "2160 LaserFlow Module",
        "data": [
            {
                "timestamp": [
                    "1087009200"
                ],
                "value": [
                    6945.68
                ]
            },
            {
                "timestamp": [
                    "1087095600"
                ],
                "value": [
                    NaN
                ]
            },
            {
                "timestamp": [
                    "1087182000"
                ],
                "value": [
                    7091.62
                ]
            },

如果“值”是 NaN,我想删除整个对象。

预期产出

     [
      {
    "Type": "UPDATE",
    "resource": {
        "site ": "Lakeside mh041",
        "name": "Total Flow",
        "unit": "CubicMeters",
        "device": "2160 LaserFlow Module",
        "data": [
            {
                "timestamp": [
                    "1087009200"
                ],
                "value": [
                    6945.68
                ]
            },
            {
                "timestamp": [
                    "1087182000"
                ],
                "value": [
                    7091.62
                ]
            },

由于文件的格式,我无法从 csv 文件中删除空白值。

我试过这个:

  with open('Result.json' , 'r') as j:
     json_dict = json.loads(j.read())
     json_dict['data'] = [item for item in json_dict['data'] if 
        len([val for val in item['value'] if isnan(val)]) == 0]

  print(json_dict)

错误 - json_dict['data'] = [item for item in json_dict['data'] if len([val for val in item['value'] if isnan(val)]) == 0] TypeError: list indices must是整数或切片,而不是 str

4

2 回答 2

1

要测试值是否为NaN,您可以使用math.isnan()函数(doc):

data = '''{"data": [
            {
                "timestamp": [
                    "1058367600"
                ],
                "value": [
                    9.65
                ]
            },
            {
                "timestamp": [
                    "1058368500"
                ],
                "value": [
                    NaN
                ]
            },
            {
                "timestamp": [
                    "1058367600"
                ],
                "value": [
                    4.75
                ]
            }
        ]}'''

import json
from math import isnan

data = json.loads(data)
data['data'] = [i for i in data['data'] if not isnan(i['value'][0])]

print(json.dumps(data, indent=4))

印刷:

{
    "data": [
        {
            "timestamp": [
                "1058367600"
            ],
            "value": [
                9.65
            ]
        },
        {
            "timestamp": [
                "1058367600"
            ],
            "value": [
                4.75
            ]
        }
    ]
}
于 2019-07-22T19:36:46.860 回答
1

如果你有多个值json"value": [...]

import json
from math import isnan

json_str = '''
[
    {
        "Type": "UPDATE",
        "resource": {
            "site ": "Lakeside mh041",
            "name": "Total Flow",
            "unit": "CubicMeters",
            "device": "2160 LaserFlow Module",
            "data": [
                {
                     "timestamp": [
                         "1087009200"
                     ],
                    "value": [
                         6945.68
                     ]
                },
                {
                    "timestamp": [
                        "1087095600"
                    ],
                    "value": [
                        NaN
                    ]
                }
            ]
        }
    }
]
'''

json_dict = json.loads(json_str)

for typeObj in json_dict:
    resource_node = typeObj['resource']
    resource_node['data'] = [
        item for item in resource_node['data']
        if len([val for val in item['value'] if isnan(val)]) == 0
    ]

print(json_dict)
于 2019-07-22T19:50:08.743 回答