python - 使用 Python 从 JSON 中删除值为 NaN 的对象?
问题描述
我的最终输出 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
解决方案
要测试值是否为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
]
}
]
}
推荐阅读
- javascript - window.history.back() 无法正常工作
- c# - 如何通过 SQLite-net-plc 在 Xamarin.Forms 中使用“.OrderBy”?
- excel - 如何在 VBA 中使用 COUNTIF?
- c - 打印到屏幕内核基础知识
- python - 是否可以使用两个集线器映像(Python 3.7.3 和 Ubuntu 18.0.4)构建 docker 容器?
- operator-overloading - 不能为我的班级重载逻辑运算符(或、和)
- google-cloud-platform - GCP 实例之间的高速通信
- javascript - 选择器参数已更改,但未调用渲染
- swift - 在 SwiftUI 视图中嵌入视频
- python - 剪切 os.system 的输出的一行并将其写入文件