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

如何在JSON字符串中搜索特定值?API邮编查询求助

解决方法:匹配嵌套JSON中的邮编字段

首先,你当前的查询方式有问题——因为human_address字段是一个JSON格式的字符串,里面包含了zip子属性,而不是直接存储邮编。直接把用户输入的拼在human_address=后面,只会匹配那些human_address字段完全等于邮编的结果,这显然不是你想要的。

这个API是基于Socrata平台的,支持SoQL(Socrata Query Language),我们可以用它的嵌套JSON查询语法来精准匹配邮编:

1. 正确的查询URL构造

你需要使用json_extract_path_text函数(或者更简洁的->操作符)来提取human_address里的zip字段,然后和用户输入的邮编匹配。比如:

// 构造查询条件:匹配human_address中的zip等于用户输入的邮编
var queryURL = `https://data.medicare.gov/resource/ax9d-vq6k.json?$where=json_extract_path_text(human_address, 'zip') = '${zipCode}'`;

// 或者用更简洁的语法:
// var queryURL = `https://data.medicare.gov/resource/ax9d-vq6k.json?$where=human_address->'zip' = '${zipCode}'`;

如果需要支持带4位后缀的邮编(比如35653-1234),可以用LIKE进行模糊匹配:

var queryURL = `https://data.medicare.gov/resource/ax9d-vq6k.json?$where=json_extract_path_text(human_address, 'zip') LIKE '${zipCode}%'`;

2. 修改后的完整代码示例

这里给你更新后的点击事件代码,还加上了结果渲染的示例(方便你展示数据):

$('#searchClick').on("click", function() {
    // 收集并清理输入的邮编
    var zipCode = $('#zipCode').val().trim();
    
    // 验证输入(可选,确保用户输入了有效内容)
    if (!zipCode) {
        alert("请输入有效的邮编!");
        return;
    }

    // 构造正确的API查询URL
    var queryURL = `https://data.medicare.gov/resource/ax9d-vq6k.json?$where=json_extract_path_text(human_address, 'zip') LIKE '${zipCode}%'`;
    
    console.log("点击事件触发,查询URL:", queryURL);
    
    // 清空之前的结果
    $(".resultsDiv").empty();

    // 发起API请求
    $.ajax({
        url: queryURL,
        method: "GET"
    }).done(function(response) {
        console.log("返回结果:", response);
        
        // 如果没有结果,提示用户
        if (response.length === 0) {
            $(".resultsDiv").html("<p>未找到匹配该邮编的机构</p>");
            return;
        }

        // 遍历结果并渲染到页面
        response.forEach(function(facility) {
            // 解析human_address字符串为JSON对象,方便展示地址
            var addressObj = JSON.parse(facility.human_address);
            var facilityCard = `
                <div class="facility-card">
                    <h3>${facility.provider_name}</h3>
                    <p>地址:${addressObj.address}, ${addressObj.city}, ${addressObj.state} ${addressObj.zip}</p>
                    <p>整体评分:${facility.overall_rating || "未评分"}</p>
                    <p>健康检查评分:${facility.health_inspection_rating || "未评分"}</p>
                </div>
            `;
            $(".resultsDiv").append(facilityCard);
        });
    }).fail(function(error) {
        console.error("API请求失败:", error);
        $(".resultsDiv").html("<p>查询失败,请稍后重试</p>");
    });
});

3. 关键说明

  • 为什么用$where参数?因为Socrata API的?key=value方式只支持匹配整个字段的值,而$where允许我们写更复杂的条件,包括嵌套JSON的查询。
  • 解析human_address:因为它是字符串格式的JSON,所以用JSON.parse()把它转成对象,方便提取地址、城市等信息展示。
  • 错误处理:加上.fail()回调可以在API请求出错时给用户提示,提升体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:19:21