jQ - 查询替代 JSON 结构
jQ - query alternative JSON structures
我有以下 JSON-内联文档:
{
"a": "Person",
"alternateName": [
{
"alternateName": "1793 Diébolt"
},
{
"alternateName": "XXX Diébolt"
}
],
"uri": "http://500051893"
}
{
"a": "Person",
"alternateName": {
"alternateName": "A1-53167"
},
"uri": "http://vocab.getty.edu/ulan/500116327"
}
我想从所有 alternateName
键中获取值并将其输出为 TSV 文件。
我可以得到那些只有一个 alternateName-object 的:
jq -r "[ .uri, .alternateName.alternateName ] | join(\"\t\")"
但是我怎样才能同时获得:只有一个 alternateName-object 的那些和第一个 alternateName
键有一个带有 alternateName
个键的字典的那些?
您确实应该使用具有相同结构的数据。否则你将不得不处理奇怪的极端情况。 alternateName
应该是对象数组,否则,用每个 alternateName
对象复制根对象。
无论如何,这是处理不同类型的方法。使用替代运算符 (//
) 以及一些过滤来处理不同的情况。您可以使用 arrays
过滤器来处理数组并在之后交替假设对象。
{ uri, alternateName: .alternateName | (arrays[].alternateName // .alternateName) }
| "\(.uri)\t\(.alternateName)"
这是一个使用辅助函数来规范化 .alternateName
值的解决方案。
def vals:
if (.|type) == "object" then .[] else . end
;
"\(.uri)\t\(.alternateName[] | vals)"
我有以下 JSON-内联文档:
{
"a": "Person",
"alternateName": [
{
"alternateName": "1793 Diébolt"
},
{
"alternateName": "XXX Diébolt"
}
],
"uri": "http://500051893"
}
{
"a": "Person",
"alternateName": {
"alternateName": "A1-53167"
},
"uri": "http://vocab.getty.edu/ulan/500116327"
}
我想从所有 alternateName
键中获取值并将其输出为 TSV 文件。
我可以得到那些只有一个 alternateName-object 的:
jq -r "[ .uri, .alternateName.alternateName ] | join(\"\t\")"
但是我怎样才能同时获得:只有一个 alternateName-object 的那些和第一个 alternateName
键有一个带有 alternateName
个键的字典的那些?
您确实应该使用具有相同结构的数据。否则你将不得不处理奇怪的极端情况。 alternateName
应该是对象数组,否则,用每个 alternateName
对象复制根对象。
无论如何,这是处理不同类型的方法。使用替代运算符 (//
) 以及一些过滤来处理不同的情况。您可以使用 arrays
过滤器来处理数组并在之后交替假设对象。
{ uri, alternateName: .alternateName | (arrays[].alternateName // .alternateName) }
| "\(.uri)\t\(.alternateName)"
这是一个使用辅助函数来规范化 .alternateName
值的解决方案。
def vals:
if (.|type) == "object" then .[] else . end
;
"\(.uri)\t\(.alternateName[] | vals)"