You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选嵌套JSON数组中likes值大于50的数据行?

嘿,这个问题我太熟悉了!要筛选嵌套JSON数组里likes字段值大于50的数据,得看你用什么工具来处理——我给你分享两个最常用的场景,都是日常处理JSON的利器:

用Python处理

Python的json模块可以轻松搞定这个需求,不管你是单条数据还是多条数据组成的数组,都能灵活处理。

单条数据的情况

比如你给出的示例JSON,我们可以解析后筛选locations中符合条件的元素,同时保留外层的id和name:

import json

# 你的示例JSON数据(这里我多加了一个likes=40的条目方便对比)
json_data = '''
{ 
  "id":2, 
  "name":"TEST", 
  "locations":[ 
    { "cityName":"NEW YORK", "lat":123, "lon":456, "likes":1000, "dislikes":5 },
    { "cityName":"LONDON", "lat":789, "lon":101, "likes":40, "dislikes":20 }
  ] 
}
'''

# 把JSON字符串转成Python字典
data = json.loads(json_data)

# 筛选locations中likes>50的条目,重新组织成新的JSON结构
filtered_result = {
    "id": data["id"],
    "name": data["name"],
    "locations": [loc for loc in data["locations"] if loc["likes"] > 50]
}

# 格式化输出结果
print(json.dumps(filtered_result, indent=2))

运行后会输出:

{
  "id": 2,
  "name": "TEST",
  "locations": [
    {
      "cityName": "NEW YORK",
      "lat": 123,
      "lon": 456,
      "likes": 1000,
      "dislikes": 5
    }
  ]
}

多条数据行的情况

如果你的原始数据是多个数据行组成的数组(比如批量数据),可以在外层再套一层列表推导,还能可选过滤掉筛选后locations为空的行:

import json

# 多条数据的示例数组
json_array_data = '''
[
  { 
    "id":2, 
    "name":"TEST", 
    "locations":[ 
      { "cityName":"NEW YORK", "likes":1000 },
      { "cityName":"LONDON", "likes":40 }
    ] 
  },
  { 
    "id":3, 
    "name":"ANOTHER TEST", 
    "locations":[ 
      { "cityName":"PARIS", "likes":60 },
      { "cityName":"TOKYO", "likes":30 }
    ] 
  },
  { 
    "id":4, 
    "name":"EMPTY TEST", 
    "locations":[ 
      { "cityName":"SYDNEY", "likes":30 }
    ] 
  }
]
'''

data_array = json.loads(json_array_data)
filtered_rows = [
    {
        "id": row["id"],
        "name": row["name"],
        "locations": [loc for loc in row["locations"] if loc["likes"] > 50]
    }
    for row in data_array
    # 可选:去掉筛选后locations为空的行
    if any(loc["likes"] > 50 for loc in row["locations"])
]

print(json.dumps(filtered_rows, indent=2))

这段代码会自动排除id=4的那条数据,因为它的locations里没有符合条件的元素。

用jq命令行工具处理

如果你习惯用命令行处理JSON,jq绝对是首选工具,语法简洁高效。

单条数据的情况

直接用map(select(...))筛选locations数组,并用|=把结果赋值回原字段:

echo '{"id":2,"name":"TEST","locations":[{"cityName":"NEW YORK","lat":123,"lon":456,"likes":1000,"dislikes":5},{"cityName":"LONDON","lat":789,"lon":101,"likes":40,"dislikes":20}]}' | jq '.locations |= map(select(.likes > 50))'

多条数据行的情况

外层用map()遍历每个数据行,同样可以加select(.locations != [])去掉空的行:

echo '[ {"id":2,"name":"TEST","locations":[{"cityName":"NEW YORK","likes":1000},{"cityName":"LONDON","likes":40}]}, {"id":3,"name":"ANOTHER TEST","locations":[{"cityName":"PARIS","likes":60},{"cityName":"TOKYO","likes":30}]}, {"id":4,"name":"EMPTY TEST","locations":[{"cityName":"SYDNEY","likes":30}]} ]' | jq 'map( .locations |= map(select(.likes >50)) | select(.locations != []) )'

内容的提问来源于stack exchange,提问作者Probine Business

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:57:59