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

使用Json Path筛选字符串列表重构谷歌地理编码地址

问题:通过JSONPath重构谷歌地理编码地址组件

我有一段谷歌地理编码服务返回的JSON子集:

{
    "address_components": [
        {
            "long_name": "43a",
            "short_name": "43a",
            "types": [
                "street_number"
            ]
        },
        {
            "long_name": "South Audley Street",
            "short_name": "S Audley St",
            "types": [
                "route"
            ]
        },
        {
            "long_name": "London",
            "short_name": "London",
            "types": [
                "postal_town"
            ]
        },
        {
            "long_name": "Greater London",
            "short_name": "Greater London",
            "types": [
                "administrative_area_level_2",
                "political"
            ]
        },
        {
            "long_name": "England",
            "short_name": "England",
            "types": [
                "administrative_area_level_1",
                "political"
            ]
        },
        {
            "long_name": "United Kingdom",
            "short_name": "GB",
            "types": [
                "country",
                "political"
            ]
        },
        {
            "long_name": "W1K 2PU",
            "short_name": "W1K 2PU",
            "types": [
                "postal_code"
            ]
        }
    ]
}

需要用JSONPath查询将地址组件重构为以下多行字符串:

43a S Audley St
London W1K 2PU
United Kingdom

我尝试过用筛选表达式和in操作符对types属性筛选,但一直没成功,求技术帮助。


解决方案

步骤1:拆分各地址段的JSONPath查询

要得到目标格式,需要分三次查询提取不同的地址部分:

  1. 第一行(门牌号+街道):筛选types包含street_number或route的组件,取short_name

    $..address_components[?(@.types in ['street_number','route'])].short_name
    

    执行后得到数组:["43a", "S Audley St"],直接拼接成字符串即可。

  2. 第二行(城镇+邮编):筛选types包含postal_town或postal_code的组件,取short_name

    $..address_components[?(@.types in ['postal_town','postal_code'])].short_name
    

    执行后得到数组:["London", "W1K 2PU"],拼接成字符串。

  3. 第三行(国家):筛选types包含country的组件,取long_name(需要全称而非缩写)

    $..address_components[?(@.types in ['country'])].long_name
    

    执行后得到数组:["United Kingdom"],直接取该值。

步骤2:拼接结果

将三次查询得到的结果分别拼接成字符串,再按换行符组合,即可得到目标格式。

注意事项

  • 不同JSONPath实现对in操作符的支持可能有差异,部分实现需要用contains函数替代,比如:
    $..address_components[?(@.types contains 'street_number' || @.types contains 'route')].short_name
    
  • 若使用支持字符串拼接的JSONPath工具(如Jayway JsonPath),可以直接通过表达式完成拼接,但多数基础工具需要在查询后手动处理拼接逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:42:07