JQ 如果那么否则
JQ If then Else
我将如何对字段的值执行 if then else?例如我正在使用的数据如下所示:
{"_key": "USCA3DC_8f4521822c099c3e",
"partner_attributions": ["This business is a Yelp advertiser."],
"showcase_photos": [
["Mathnasium of Westwood - Westwood, CA, United States. Nice and caring instructors", "http://s3-media1.fl.yelpcdn.com/bphoto/KeKAhvy2HHY4KGpvA24VaA/ls.jpg"],
["Mathnasium of Westwood - Westwood, CA, United States. Prize box and estimation jar!", "http://s3-media3.fl.yelpcdn.com/bphoto/lJWHHCAVaUMfeFD7GDKtHw/ls.jpg"],
["Mathnasium of Westwood - Westwood, CA, United States. New table setup!!!!", "http://s3-media2.fl.yelpcdn.com/bphoto/kVYJrYqDRHPOH4F2uTuFVg/ls.jpg"],
["Mathnasium of Westwood - Westwood, CA, United States. Halloween party", "http://s3-media3.fl.yelpcdn.com/bphoto/wKm5KjF0V8MsPTVSuofPEQ/180s.jpg"],
["Mathnasium of Westwood - Westwood, CA, United States", "http://s3-media4.fl.yelpcdn.com/bphoto/r2981msJm0c1ocU09blb1A/180s.jpg"],
["Mathnasium of Westwood - Westwood, CA, United States", "http://s3-media3.fl.yelpcdn.com/bphoto/r2Vgo18YKeUojDvjQMRF_A/180s.jpg"]
],
"review_count": "24",
"yelp_id": "t7WyXcABE3xj20G-UqXalA",
"rating_value": "5.0",
"coordinates": {
"latitude": "34.042568",
"longitude": "-118.431038"
}
}
这只是其中的一小部分,但是我使用这个表达式来解析它:
{_key, last_visited, name, phone, price_range, rating_value, review_count, updated, url, website, yelp_id} + (if (.partner_attributions | length) > 0 then .partner_attributions == "yes" else .partner_attributions == "no" end) + ([leaf_paths as $path | {"key": $path | map(tostring) | join("_"),"value": getpath($path)}] | from_entries)
我想要做的是为 Partner_attributions 字段设置一个 If then else,如果有内容则设为是,如果为空则设为否。我已经尝试了一些操作没有成功,看起来很简单,但很难弄明白。
有人可以帮忙吗?
您需要创建一个实际对象以添加到第一个对象。将 if
表达式更改为:
{partner_attributions: (if (.partner_attributions | length) > 0 then "yes" else "no" end)}
也许更好:
.partner_attributions |= (if length > 0 then "yes" else "no" end)
这只会更新一个字段而不会修改任何其他内容。
我将如何对字段的值执行 if then else?例如我正在使用的数据如下所示:
{"_key": "USCA3DC_8f4521822c099c3e",
"partner_attributions": ["This business is a Yelp advertiser."],
"showcase_photos": [
["Mathnasium of Westwood - Westwood, CA, United States. Nice and caring instructors", "http://s3-media1.fl.yelpcdn.com/bphoto/KeKAhvy2HHY4KGpvA24VaA/ls.jpg"],
["Mathnasium of Westwood - Westwood, CA, United States. Prize box and estimation jar!", "http://s3-media3.fl.yelpcdn.com/bphoto/lJWHHCAVaUMfeFD7GDKtHw/ls.jpg"],
["Mathnasium of Westwood - Westwood, CA, United States. New table setup!!!!", "http://s3-media2.fl.yelpcdn.com/bphoto/kVYJrYqDRHPOH4F2uTuFVg/ls.jpg"],
["Mathnasium of Westwood - Westwood, CA, United States. Halloween party", "http://s3-media3.fl.yelpcdn.com/bphoto/wKm5KjF0V8MsPTVSuofPEQ/180s.jpg"],
["Mathnasium of Westwood - Westwood, CA, United States", "http://s3-media4.fl.yelpcdn.com/bphoto/r2981msJm0c1ocU09blb1A/180s.jpg"],
["Mathnasium of Westwood - Westwood, CA, United States", "http://s3-media3.fl.yelpcdn.com/bphoto/r2Vgo18YKeUojDvjQMRF_A/180s.jpg"]
],
"review_count": "24",
"yelp_id": "t7WyXcABE3xj20G-UqXalA",
"rating_value": "5.0",
"coordinates": {
"latitude": "34.042568",
"longitude": "-118.431038"
}
}
这只是其中的一小部分,但是我使用这个表达式来解析它:
{_key, last_visited, name, phone, price_range, rating_value, review_count, updated, url, website, yelp_id} + (if (.partner_attributions | length) > 0 then .partner_attributions == "yes" else .partner_attributions == "no" end) + ([leaf_paths as $path | {"key": $path | map(tostring) | join("_"),"value": getpath($path)}] | from_entries)
我想要做的是为 Partner_attributions 字段设置一个 If then else,如果有内容则设为是,如果为空则设为否。我已经尝试了一些操作没有成功,看起来很简单,但很难弄明白。
有人可以帮忙吗?
您需要创建一个实际对象以添加到第一个对象。将 if
表达式更改为:
{partner_attributions: (if (.partner_attributions | length) > 0 then "yes" else "no" end)}
也许更好:
.partner_attributions |= (if length > 0 then "yes" else "no" end)
这只会更新一个字段而不会修改任何其他内容。