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