如何从给定GA返回的JSON数据中获取用户量最高的前3个城市
实现方法
核心逻辑
- 你拿到的GA返回结果是数组结构,有效数据存放在第一个元素的
data.rows字段中 - 每条row对应一个城市的统计数据:
row.dimensions[0]为城市名称,row.metrics[0].values[0]为对应用户数(返回值为字符串类型,需转整型才能正确排序) - 按用户数降序排序后截取前3条即可,若需排除未识别的
(not set)城市,遍历的时候加过滤规则即可
小提示:你提供的示例JSON存在语法瑕疵,
rows数组末尾缺少闭合的],实际使用前需要先修正格式。
代码示例
Python 实现
# 假设GA返回的原始数据存储在ga_result变量中 # 提取所有城市和对应用户数 city_data = [] for row in ga_result[0]["data"]["rows"]: city = row["dimensions"][0] user_count = int(row["metrics"][0]["values"][0]) # 若要排除(not set),可加判断 if city != "(not set)" 再存入 city_data.append((user_count, city)) # 按用户数降序排序 city_data.sort(reverse=True, key=lambda x: x[0]) # 取前3位 top3_cities = city_data[:3] # 输出结果 for count, name in top3_cities: print(f"城市:{name},用户数:{count}")
JavaScript 实现
// 假设GA返回的原始数据存储在gaResult变量中 const cityData = gaResult[0].data.rows.map(row => ({ city: row.dimensions[0], userCount: parseInt(row.metrics[0].values[0]) // 若要排除(not set),可加过滤:.filter(item => item.city !== "(not set)") })) // 按用户数降序排序 cityData.sort((a, b) => b.userCount - a.userCount) // 取前3位 const top3Cities = cityData.slice(0, 3) console.log(top3Cities)
示例数据运行结果
按你提供的JSON示例,直接运行后得到的前3名结果如下:
- (not set):537
- Sao Paulo:338
- Belo Horizonte:163
如果过滤掉(not set)的未识别城市,前3名为:
- Sao Paulo:338
- Belo Horizonte:163
- Rio de Janeiro:133
内容的提问来源于stack exchange,提问作者Lucas Bersano Matteo
相关产品推荐
相关产品推荐

