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

如何在满足两个条件时从JSON取值(结合Google Maps场景)

实现点击标记并满足条件时获取JSON对应值的方案

嘿,我来帮你搞定这个需求!你已经搞定了标记显示和点击获取经纬度,接下来要做的就是把标记和对应的JSON数据关联起来,再加上条件判断就行,步骤很清晰:

1. 先把JSON数据转换成实体类对象列表

首先别直接用原始的JSON字符串操作,咱们把它转换成Java对象,这样后续拿数据超方便。首先创建一个Hotel实体类(注意long是Java关键字,所以把属性名改成longitude或者lon):

public class Hotel {
    private String name;
    private String lat;
    private String longitude; // 避开Java关键字long

    // 生成getter、setter方法和构造函数
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getLat() { return lat; }
    public void setLat(String lat) { this.lat = lat; }
    public String getLongitude() { return longitude; }
    public void setLongitude(String longitude) { this.longitude = longitude; }
}

然后用Gson(或者你习惯的JSON解析库)把你的JSON字符串转换成List<Hotel>:

String jsonStr = "[ { \"name\": \"Hotel 1\", \"lat\": \"39.323523\", \"long\": \"-3.036840\" }, { \"name\": \"Hotel 2\", \"lat\": \"39.323523\", \"long\": \"-2.937963\" } ]";
Gson gson = new Gson();
Type listType = new TypeToken<List<Hotel>>(){}.getType();
List<Hotel> hotelList = gson.fromJson(jsonStr, listType);

2. 添加标记时关联对应的Hotel对象

在你添加Marker到地图的时候,把对应的Hotel对象存到Marker的Tag里,这样点击标记时就能直接拿到这个对象:

for (Hotel hotel : hotelList) {
    double latitude = Double.parseDouble(hotel.getLat());
    double longitude = Double.parseDouble(hotel.getLongitude());
    Marker marker = mMap.addMarker(new MarkerOptions()
            .position(new LatLng(latitude, longitude))
            .title(hotel.getName()));
    // 把Hotel对象绑定到Marker上
    marker.setTag(hotel);
}

3. 在点击事件里判断条件并获取对应值

现在在你的OnMarkerClickListener里,先拿到标记对应的Hotel对象,然后根据你的两个条件判断,满足的话就获取对应的值。比如假设你的条件是:纬度等于39.323523 且 名称包含"Hotel",代码如下:

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
    @Override
    public boolean onMarkerClick(Marker marker) {
        // 从Marker的Tag里取出对应的Hotel对象
        Hotel clickedHotel = (Hotel) marker.getTag();
        if (clickedHotel != null) {
            // 替换成你的两个具体条件
            boolean condition1 = "39.323523".equals(clickedHotel.getLat());
            boolean condition2 = clickedHotel.getName().contains("Hotel");

            if (condition1 && condition2) {
                // 满足条件,获取你需要的对应值
                String hotelName = clickedHotel.getName();
                String hotelLat = clickedHotel.getLat();
                String hotelLon = clickedHotel.getLongitude();
                // 这里可以做你需要的操作,比如弹窗显示、存储数据等
                Log.d("HotelInfo", "满足条件的酒店:" + hotelName + ",经纬度:" + hotelLat + "," + hotelLon);
            }
        }
        return false; // 返回false让地图默认处理点击事件(比如显示InfoWindow)
    }
});

这样操作的好处是不用每次点击都去遍历整个JSON列表找对应数据,直接通过Marker的Tag关联对象,效率更高也更简洁。你只需要把代码里的condition1和condition2替换成你实际需要的判断逻辑就行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:40:50