Python 尝试从JSON文件计算数组中的项数
我用我的rpi创建了一个json文件(见下文),我正在查看数组中的项数(在本例中,我将查看十六进制出现的次数) JSON文件Python 尝试从JSON文件计算数组中的项数,python,Python,我用我的rpi创建了一个json文件(见下文),我正在查看数组中的项数(在本例中,我将查看十六进制出现的次数) JSON文件 { "now": 1558947116.6, "messages": 44571282, "aircraft": [{ "hex": "405658", "alt_baro": 6775, "ias": 219, "mach": 0.376,
{
"now": 1558947116.6,
"messages": 44571282,
"aircraft": [{
"hex": "405658",
"alt_baro": 6775,
"ias": 219,
"mach": 0.376,
"mag_heading": 75.4,
"baro_rate": -1216,
"geom_rate": -1344,
"squawk": "0405",
"mlat": [],
"tisb": [],
"messages": 48,
"seen": 0.1,
"rssi": -18.0
}, {
"hex": "4072a0",
"flight": "BEE7TL ",
"alt_baro": 23975,
"gs": 278.0,
"ias": 206,
"tas": 302,
"mach": 0.488,
"track": 334.0,
"roll": -0.4,
"mag_heading": 320.6,
"baro_rate": 1184,
"geom_rate": 928,
"squawk": "1440",
"nav_altitude": 24000,
"mlat": [],
"tisb": [],
"messages": 195,
"seen": 0.1,
"rssi": -19.1
}, {
"hex": "400a5b",
"flight": "SHT17Q ",
"alt_baro": 37000,
"alt_geom": 36825,
"gs": 460.6,
"ias": 252,
"tas": 450,
"mach": 0.780,
"track": 155.8,
"track_rate": -0.03,
"roll": -0.2,
"mag_heading": 163.7,
"baro_rate": 160,
"geom_rate": 64,
"squawk": "4464",
"category": "A0",
"nav_qnh": 1006.0,
"nav_altitude": 37008,
"lat": 53.376617,
"lon": -2.895996,
"nic": 8,
"rc": 186,
"seen_pos": 0.1,
"version": 0,
"nac_v": 2,
"mlat": [],
"tisb": [],
"messages": 1949,
"seen": 0.1,
"rssi": -12.4
}, {
"hex": "a895eb",
"flight": "UAL940 ",
"alt_baro": 35000,
"alt_geom": 34925,
"gs": 530.7,
"ias": 281,
"tas": 476,
"mach": 0.824,
"track": 104.8,
"track_rate": 0.03,
"roll": 0.5,
"mag_heading": 110.4,
"baro_rate": 0,
"geom_rate": 0,
"squawk": "6323",
"emergency": "none",
"category": "A5",
"nav_qnh": 1013.6,
"nav_altitude": 35008,
"nav_heading": 106.9,
"lat": 53.059915,
"lon": -2.493426,
"nic": 8,
"rc": 186,
"seen_pos": 0.9,
"version": 2,
"nic_baro": 1,
"nac_p": 9,
"nac_v": 1,
"sil": 3,
"sil_type": "perhour",
"gva": 2,
"sda": 2,
"mlat": [],
"tisb": [],
"messages": 5093,
"seen": 0.1,
"rssi": -3.8
}, {
"hex": "4074b4",
"flight": "EZY93QG ",
"alt_baro": 34000,
"alt_geom": 34100,
"gs": 410.4,
"ias": 259,
"tas": 430,
"mach": 0.748,
"track": 322.8,
"track_rate": 0.00,
"roll": 0.0,
"mag_heading": 315.4,
"baro_rate": 0,
"geom_rate": 32,
"squawk": "2720",
"emergency": "none",
"category": "A3",
"nav_qnh": 1013.6,
"nav_altitude": 34016,
"nav_heading": 0.0,
"lat": 52.728137,
"lon": -1.090864,
"nic": 8,
"rc": 186,
"seen_pos": 0.2,
"version": 2,
"nic_baro": 1,
"nac_p": 9,
"nac_v": 1,
"sil": 3,
"sil_type": "perhour",
"gva": 2,
"sda": 2,
"mlat": [],
"tisb": [],
"messages": 4134,
"seen": 0.1,
"rssi": -10.3
}, {
"hex": "4ca4ed",
"alt_baro": 38000,
"gs": 394.2,
"track": 285.4,
"baro_rate": 832,
"lat": 51.823487,
"lon": -2.558136,
"nic": 0,
"rc": 0,
"seen_pos": 45.6,
"nac_v": 0,
"mlat": ["gs", "track", "baro_rate", "lat", "lon", "nic", "rc", "nac_v"],
"tisb": [],
"messages": 95,
"seen": 1.3,
"rssi": -21.6
}, {
"hex": "406a99",
"alt_baro": 9000,
"squawk": "6357",
"lat": 51.813538,
"lon": -2.090075,
"nic": 9,
"rc": 75,
"seen_pos": 55.6,
"version": 2,
"sil_type": "perhour",
"mlat": [],
"tisb": [],
"messages": 559,
"seen": 49.2,
"rssi": -22.1
}, {
"hex": "710111",
"mlat": [],
"tisb": [],
"messages": 49,
"seen": 257.5,
"rssi": -23.3
}, {
"hex": "392aef",
"flight": "AFR1669 ",
"alt_baro": 20750,
"alt_geom": 20675,
"gs": 430.0,
"ias": 302,
"tas": 408,
"mach": 0.664,
"track": 143.8,
"track_rate": 0.00,
"roll": 0.0,
"mag_heading": 151.7,
"baro_rate": 2112,
"geom_rate": 2048,
"squawk": "6301",
"category": "A0",
"nav_qnh": 1009.0,
"nav_altitude": 31008,
"lat": 52.662918,
"lon": -2.054367,
"nic": 7,
"rc": 371,
"seen_pos": 0.3,
"version": 0,
"nac_v": 2,
"mlat": [],
"tisb": [],
"messages": 7400,
"seen": 0.0,
"rssi": -12.2
}, {
"hex": "400cee",
"mlat": [],
"tisb": [],
"messages": 114,
"seen": 91.0,
"rssi": -22.6
}
}
}
一个简单的解决方案是将
JSON
转换为字符串
,然后使用.count()
方法计算'hex'的频率
import json
data = {
"now": 1558947116.6,
"messages": 44571282,
"aircraft": [
{
"hex": "405658",
"alt_baro": 6775,
"ias": 219,
"mach": 0.376,
"mag_heading": 75.4,
"baro_rate": -1216,
"geom_rate": -1344,
"squawk": "0405",
"mlat": [],
"tisb": [],
"messages": 48,
"seen": 0.1,
"rssi": -18.0
},
{
"hex": "4072a0",
"flight": "BEE7TL ",
"alt_baro": 23975,
"gs": 278.0,
"ias": 206,
"tas": 302,
"mach": 0.488,
"track": 334.0,
"roll": -0.4,
"mag_heading": 320.6,
"baro_rate": 1184,
"geom_rate": 928,
"squawk": "1440",
"nav_altitude": 24000,
"mlat": [],
"tisb": [],
"messages": 195,
"seen": 0.1,
"rssi": -19.1
},
{
"hex": "400a5b",
"flight": "SHT17Q ",
"alt_baro": 37000,
"alt_geom": 36825,
"gs": 460.6,
"ias": 252,
"tas": 450,
"mach": 0.780,
"track": 155.8,
"track_rate": -0.03,
"roll": -0.2,
"mag_heading": 163.7,
"baro_rate": 160,
"geom_rate": 64,
"squawk": "4464",
"category": "A0",
"nav_qnh": 1006.0,
"nav_altitude": 37008,
"lat": 53.376617,
"lon": -2.895996,
"nic": 8,
"rc": 186,
"seen_pos": 0.1,
"version": 0,
"nac_v": 2,
"mlat": [],
"tisb": [],
"messages": 1949,
"seen": 0.1,
"rssi": -12.4
},
{
"hex": "a895eb",
"flight": "UAL940 ",
"alt_baro": 35000,
"alt_geom": 34925,
"gs": 530.7,
"ias": 281,
"tas": 476,
"mach": 0.824,
"track": 104.8,
"track_rate": 0.03,
"roll": 0.5,
"mag_heading": 110.4,
"baro_rate": 0,
"geom_rate": 0,
"squawk": "6323",
"emergency": "none",
"category": "A5",
"nav_qnh": 1013.6,
"nav_altitude": 35008,
"nav_heading": 106.9,
"lat": 53.059915,
"lon": -2.493426,
"nic": 8,
"rc": 186,
"seen_pos": 0.9,
"version": 2,
"nic_baro": 1,
"nac_p": 9,
"nac_v": 1,
"sil": 3,
"sil_type": "perhour",
"gva": 2,
"sda": 2,
"mlat": [],
"tisb": [],
"messages": 5093,
"seen": 0.1,
"rssi": -3.8
},
{
"hex": "4074b4",
"flight": "EZY93QG ",
"alt_baro": 34000,
"alt_geom": 34100,
"gs": 410.4,
"ias": 259,
"tas": 430,
"mach": 0.748,
"track": 322.8,
"track_rate": 0.00,
"roll": 0.0,
"mag_heading": 315.4,
"baro_rate": 0,
"geom_rate": 32,
"squawk": "2720",
"emergency": "none",
"category": "A3",
"nav_qnh": 1013.6,
"nav_altitude": 34016,
"nav_heading": 0.0,
"lat": 52.728137,
"lon": -1.090864,
"nic": 8,
"rc": 186,
"seen_pos": 0.2,
"version": 2,
"nic_baro": 1,
"nac_p": 9,
"nac_v": 1,
"sil": 3,
"sil_type": "perhour",
"gva": 2,
"sda": 2,
"mlat": [],
"tisb": [],
"messages": 4134,
"seen": 0.1,
"rssi": -10.3
},
{
"hex": "4ca4ed",
"alt_baro": 38000,
"gs": 394.2,
"track": 285.4,
"baro_rate": 832,
"lat": 51.823487,
"lon": -2.558136,
"nic": 0,
"rc": 0,
"seen_pos": 45.6,
"nac_v": 0,
"mlat": [
"gs",
"track",
"baro_rate",
"lat",
"lon",
"nic",
"rc",
"nac_v"
],
"tisb": [],
"messages": 95,
"seen": 1.3,
"rssi": -21.6
},
{
"hex": "406a99",
"alt_baro": 9000,
"squawk": "6357",
"lat": 51.813538,
"lon": -2.090075,
"nic": 9,
"rc": 75,
"seen_pos": 55.6,
"version": 2,
"sil_type": "perhour",
"mlat": [],
"tisb": [],
"messages": 559,
"seen": 49.2,
"rssi": -22.1
},
{
"hex": "710111",
"mlat": [],
"tisb": [],
"messages": 49,
"seen": 257.5,
"rssi": -23.3
},
{
"hex": "392aef",
"flight": "AFR1669 ",
"alt_baro": 20750,
"alt_geom": 20675,
"gs": 430.0,
"ias": 302,
"tas": 408,
"mach": 0.664,
"track": 143.8,
"track_rate": 0.00,
"roll": 0.0,
"mag_heading": 151.7,
"baro_rate": 2112,
"geom_rate": 2048,
"squawk": "6301",
"category": "A0",
"nav_qnh": 1009.0,
"nav_altitude": 31008,
"lat": 52.662918,
"lon": -2.054367,
"nic": 7,
"rc": 371,
"seen_pos": 0.3,
"version": 0,
"nac_v": 2,
"mlat": [],
"tisb": [],
"messages": 7400,
"seen": 0.0,
"rssi": -12.2
},
{
"hex": "400cee",
"mlat": [],
"tisb": [],
"messages": 114,
"seen": 91.0,
"rssi": -22.6
}
]
}
data = json.dumps(data) # Convert JSON to String
hex_count = data.count('hex') # Count Frequency of 'hex'
如果您使用
json
模块加载文件,您可以迭代airpair
列表中的条目,并计算字典中hex
的次数:
导入json
将open('yourfile.json')作为fh:#打开文件
data=json.load(fh)#将其作为字典加载到内存中
hexes=0#将其初始化为0以避免名称错误
对于数据中的craft['aircraft']:#迭代条目
如果工艺中有“十六进制”:#检查字典中的键
hexes+=1#如果该键存在,它将增加hexes
六边形
# 10
或者,更简洁地说,您可以将列表理解与sum
一起使用:
hexes=sum([1用于数据中的飞行器['aircraft'],如果飞行器中为'hex'))
在这里,您将得到一个
列表,其中包含键'hex'
,每个工艺都有1个,您只需对结果进行求和
,您可以使用加载的json将其添加到计数器中:
count = 0
datastore = json.loads(json_string)
for air in datastore['aircraft']:
if 'hex' in air:
count += 1
print(count)
或者使用带有lamda的过滤器进行检查,然后获得长度
d = json.loads(json_string)
aircrafts = d['aircraft']
count1 = len(list(filter(lambda x: 'hex' in x, aircrafts)))
print(count1)
您尝试过什么?您面临的问题是什么?该文件不是真正有效的JSON,但对于有效的JSON,使用JSON
模块加载文件非常容易,只需检查飞机
数组的长度。