Arrays 使用jq将数组转换为字符串

Arrays 使用jq将数组转换为字符串,arrays,json,string,bash,jq,Arrays,Json,String,Bash,Jq,我有一个json,其原因数组的格式为[]或[“a”、“b”、“c”]。基本上我想替换 drop\u reasons=[“a”、“b”、“c”]在json中,指向drop\u reasons=“a、b、c”。我知道我们可以用jq使用join(“,”),但是,我不知道如何在json中修改它 我尝试过这个-cat test.json | jq'.drop_reasons=.drop_reasons | join(“,”)|海绵测试.json ,但没有看到,为了工作,它尝试加入整个json,而不是仅仅删

我有一个json,其原因数组的格式为
[]
[“a”、“b”、“c”]
。基本上我想替换
drop\u reasons=[“a”、“b”、“c”]
在json中,指向
drop\u reasons=“a、b、c”
。我知道我们可以用jq使用
join(“,”
),但是,我不知道如何在json中修改它

我尝试过这个-
cat test.json | jq'.drop_reasons=.drop_reasons | join(“,”)|海绵测试.json
,但没有看到,为了工作,它尝试加入整个json,而不是仅仅删除。我该如何应对?任何帮助都将不胜感激。谢谢

示例json是:

{"id":11828997,"user":"8ddbceef-c374-44be-82f6-996b9d3f9cbd","timestamp":"2020-08-12T05:50:00+05:30","claim_timestamp":"2020-08-12T20:30:58+05:30","unique_key":"d56af2a7-10b8-4a98-b12c-a8aeab9fc56e","platform":"android","location_type":"indoor","activity_type":"unknown","activity_confidence":0,"total_day_steps":151744,"gf_total_steps":0,"step_count":122,"session_id":"1792b79c-1490-4b13-83e2-3c50ebce28f4","label":"indoor","is_claimed":false,"is_dropped":false,"drop_reasons":[],"is_valid":false,"invalid_reason":["steps>allowed_freq"],"conversion":null,"createdAt":"2020-08-12T20:30:58.385285+05:30","updatedAt":"2020-08-12T20:30:58.385285+05:30","location_uuid":null,"location_latitude":28.6673,"location_longitude":77.3915,"location_accuracy":1000,"location_speed":0,"location_timestamp":"2020-08-12T05:46:40+05:30","location_altitude":0,"location_ios_distance_filler":null,"location_ios_desired_accuracy":null,"location_distance_filter":0,"location_desired_accuracy":0,"location_course":0,"location_floor":null,"meta_data_geo_string":"28.6672867,77.3914746","meta_data_timezone":"Asia/Kolkata","meta_data_device_model":"Redmi Note 8 Pro","meta_data_device_brand":"redmi","meta_data_device_manufacturer":"xiaomi","meta_data_app_version":"0.9.31","meta_data_bundle_id":"com.pepkit.ssg","meta_data_build_no":"213","meta_data_plan_id":"a562ad72-54a9-4aea-941c-7f075e2a8b18"}

我不熟悉
jq
,但是如果你只是用
替换每一个
,“
,它就成功了。这是一个黑客程序,因此如果输入数据格式发生变化,它可能会崩溃

$ cat temp.txt 
drop_reasons=["a","b","c"]

$ perl -pe 's/","/,/g' temp.txt
drop_reasons=["a,b,c"]


我不熟悉
jq
,但是如果你只是用
替换每一个
,“
,它就成功了。这是一个黑客程序,因此如果输入数据格式发生变化,它可能会崩溃

$ cat temp.txt 
drop_reasons=["a","b","c"]

$ perl -pe 's/","/,/g' temp.txt
drop_reasons=["a,b,c"]


仅使用具有相关键的精简示例JSON对象:

$cat test.json
{
“放弃理由”:[“a”、“b”、“c”]
}
$jq'.drop_reasons |=join(“,”)test.json
{
“放弃理由”:“a、b、c”
}
带有空数组的示例将更改为空字符串



x |=y
本质上是
x=(x | y)
的缩写。帕伦夫妇是你在尝试中错过的;它们之所以需要,是因为
jq
优先规则。

使用一个简化的示例JSON对象,只使用相关的键:

$cat test.json
{
“放弃理由”:[“a”、“b”、“c”]
}
$jq'.drop_reasons |=join(“,”)test.json
{
“放弃理由”:“a、b、c”
}
带有空数组的示例将更改为空字符串



x |=y
本质上是
x=(x | y)
的缩写。帕伦夫妇是你在尝试中错过的;因为
jq
优先规则,所以需要它们。

这将改变JSONI中的所有逗号,如果它们被双引号包围,是的。根据样本数据,它将起作用。如果你有一个更完整的输入文件,你可以分享我可以做得更好。不过,这可能是一个Python脚本。如果JSONI中的逗号被双引号括起来,那么这将改变JSONI中的所有逗号,是的。根据样本数据,它将起作用。如果你有一个更完整的输入文件,你可以分享我可以做得更好。不过,它可能是一个Python脚本。添加了示例jsonWow!这很有效,我知道“|=”更新符号,但上次我使用它时,它用1个值更新了所有的值,也许我当时用错了,无论如何,谢谢!添加了样本jsonWow!这很有效,我知道“|=”更新符号,但上次我使用它时,它用1个值更新了所有的值,也许我当时用错了,无论如何,谢谢!