使用Python从值为NaN的JSON中删除对象?

使用Python从值为NaN的JSON中删除对象?,python,json,nan,Python,Json,Nan,我的最终输出JSON文件的格式如下 [ { "Type": "UPDATE", "resource": { "site ": "Lakeside mh041", "name": "Total Flow", "unit": "CubicMeters", "device": "2160 LaserFlow Module", "data": [ {

我的最终输出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']=[json_dict['data']中的项对项如果len([val for val in item['value']如果isnan(val)])==0]
TypeError:列表索引必须是整数或片,而不是str,用于测试值是否为
NaN
您可以使用
math.isnan()
函数():

印刷品:

{
    "data": [
        {
            "timestamp": [
                "1058367600"
            ],
            "value": [
                9.65
            ]
        },
        {
            "timestamp": [
                "1058367600"
            ],
            "value": [
                4.75
            ]
        }
    ]
}

为了测试值是否为
NaN
,可以使用
math.isnan()
function():

印刷品:

{
    "data": [
        {
            "timestamp": [
                "1058367600"
            ],
            "value": [
                9.65
            ]
        },
        {
            "timestamp": [
                "1058367600"
            ],
            "value": [
                4.75
            ]
        }
    ]
}

如果
json“value”有多个值:[…]
那么

导入json
从数学导入isnan
json_str=''
[
{
“类型”:“更新”,
“资源”:{
“现场”:“湖边mh041”,
“名称”:“总流量”,
“单位”:“立方米”,
“设备”:“2160激光流模块”,
“数据”:[
{
“时间戳”:[
"1087009200"
],
“价值”:[
6945.68
]
},
{
“时间戳”:[
"1087095600"
],
“价值”:[
楠
]
}
]
}
}
]
'''
json_dict=json.loads(json_str)
对于json_dict中的typeObj:
resource_node=typeObj['resource']
资源_节点['data']=[
资源_节点中的项的项['data']
if len([val for val in item['value']if isnan(val)])==0
]
打印(json_dict)

如果
json“值”有多个值:[…]
那么

导入json
从数学导入isnan
json_str=''
[
{
“类型”:“更新”,
“资源”:{
“现场”:“湖边mh041”,
“名称”:“总流量”,
“单位”:“立方米”,
“设备”:“2160激光流模块”,
“数据”:[
{
“时间戳”:[
"1087009200"
],
“价值”:[
6945.68
]
},
{
“时间戳”:[
"1087095600"
],
“价值”:[
楠
]
}
]
}
}
]
'''
json_dict=json.loads(json_str)
对于json_dict中的typeObj:
resource_node=typeObj['resource']
资源_节点['data']=[
资源_节点中的项的项['data']
if len([val for val in item['value']if isnan(val)])==0
]
打印(json_dict)

NaN不是JSON的一部分——这不是有效的JSON结构。你能澄清你的意图吗?您尝试了什么来解决这个问题?@ggorlen Python的标准库json解码器实际上支持literal
NaN
,尽管它不是标准的一部分。谢谢——我学到了一些新东西。您描述的
TypeError
表明您的JSON数据可能没有您期望的结构。你能再次检查一下你所展示的内容是否具有代表性,并且没有遗漏任何额外的层吗?@Blckknght是的,有额外的层。我想那没必要。让我再次编辑我的JSON。NaN不是JSON的一部分——这不是有效的JSON结构。你能澄清你的意图吗?您尝试了什么来解决这个问题?@ggorlen Python的标准库json解码器实际上支持literal
NaN
,尽管它不是标准的一部分。谢谢——我学到了一些新东西。您描述的
TypeError
表明您的JSON数据可能没有您期望的结构。你能再次检查一下你所展示的内容是否具有代表性,并且没有遗漏任何额外的层吗?@Blckknght是的,有额外的层。我想那没必要。让我再次编辑我的JSON。我使用一个JSON文件作为输入。为此,我得到了一个错误TypeError:列表索引必须是整数或片,而不是使用JSON文件作为输入。为此,我得到了一个错误TypeError:列表索引必须是整数或片,而不是使用JSON文件作为输入。为此,我得到了一个错误TypeError:列表索引必须是整数或片,而不是为新的输入而更新的。如果您的JSON以
[
开头,那么它是一个列表…需要在
obj['key']
之前循环它一次。我正在使用JSON文件作为输入。为此,我得到一个错误类型错误:列表索引必须是整数或片,而不是为新输入而更新。如果您的JSON以
开头[
然后它是一个列表…需要在obj['key'之前循环一次它。