【问题标题】:How to manage empty select results如何管理空选择结果
【发布时间】:2019-01-25 07:57:15
【问题描述】:

我有这个输入 JSON

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Amsterdam",
               "short_name" : "Amsterdam",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Government of Amsterdam",
               "short_name" : "Government of Amsterdam",
               "types" : [ "administrative_area_level_2", "political" ]
            }
         ]
      }
   ]
}

如果我用 jq 应用这个过滤器

.results[0]|{label:"a",test:(.address_components[].types|select(.[0]| contains("administrative_area_level_2"))|.[1]?)}

我有结果

{
  "label": "a",
  "test": "political"
}

如果我修改过滤器(它是一个空选择)

.results[0]|{label:"a",test:(.address_components[].types|select(.[0]| contains("administrative_area_level_3"))|.[1]?)}

我有一个完整的empty result

如何获得类似的东西

{
  "label": "a",
  "test": ""
}

jq如何管理?

【问题讨论】:

    标签: json jq


    【解决方案1】:

    您可以使用替代运算符//。如果 E 为空或nullfalse,则表达式E // "" 将产生空字符串:

    <file jq '.results[0]|{label:"a",test:((.address_components[].types|select(.[0]| contains("administrative_area_level_3"))|.[1])//"")}'
    

    请注意,在当前情况下,您不需要 ? 运算符。

    【讨论】:

    • 非常感谢
    【解决方案2】:

    如果您不限于 jq,我能否为您提供一个我最近开发的替代工具 - jtc,使用该工具您的问题会是这样的(假设您的 json 在 file.json 中):

    bash $ echo '{ "label": "a", "test": "" }' | jtc -w'<test>l' -eu jtc -w'<administrative_area_level_2> [-1] [1]' file.json \;  
    {
       "label": "a",
       "test": "political"
    }
    bash $ echo '{ "label": "a", "test": "" }' | jtc -w'<test>l' -eu jtc -w'<administrative_area_level_3> [-1] [1]' file.json \;  
    {
       "label": "a",
       "test": ""
    }
    bash $ 
    

    更新:从jtc v.167 开始,cli 参数(-eu)需要额外引用,例如:

    bash $ echo '{ "label": "a", "test": "" }' | jtc -w'<test>l' -eu jtc -w"'<administrative_area_level_2> [-1] [1]'" file.json \;
    {
       "label": "a",
       "test": "political"
    }
    bash $ 
    

    PS。你可以在 github.com 上找到jtc,或者用关键字 jtc 和 json google

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多