我有以下简单的JSON
json='[{"k1":" http://url", "k2":null, "k3":" v3", "k4":" v4"}]'
我需要的是:
"http://url",null
(v1
和v2
之前没有空格)
我拥有的是:
echo $json | jq -c '.[] | .k1, .k2 ' | paste -d "," - -
如何摆脱k1和k2值的空间?
答案 0 :(得分:5)
如果输入是JSON对象的数组,并且如果您正在寻找单行,那么以下内容似乎符合您的要求:
jq '.[]|(.k1,.k2)|if type=="string" then gsub("^\\s+|\\s+$";"") else . end' | paste -d "," - -
根据您的输入,这会产生
"http://url",null
如果您对输出中null
的显示方式很灵活,您可能还会考虑全jq解决方案(即没有paste
)。例如:
jq -r '.[]|[.k1,.k2]|map(if type=="string" then gsub("^\\s+|\\s+$";"") else . end)|@csv'
根据您的输入,这会产生:
"http://url",
答案 1 :(得分:3)
下面将删除任意复杂JSON结构中任何位置的字符串中的前导和尾随空格:
#!/usr/bin/env jq -cf
# Define walk function (standard library only for jq 1.6 and newer, currently unreleased)
def walk(f):
. as $in
| if type == "object" then
reduce keys_unsorted[] as $key
( {}; . + { ($key): ($in[$key] | walk(f)) } ) | f
elif type == "array" then map( walk(f) ) | f
else f
end;
walk(
if type == "string" then
(sub("^[[:space:]]+"; "") | sub("[[:space:]]+$"; ""))
else . end
)
如果保存上述内容(例如在trim-json
中),并将其标记为可执行文件(chmod +x trim-json
),那么您的给定输入的./trim-json <<<"$json"
会发出:
[{"k1":"v1","k2":"v2","k3":"v3","k4":"v4"}]
同样,使用更新的输入:
$ json='[{"k1":" http://url", "k2":null, "k3":" v3", "k4":" v4"}]'
$ ./trim-json <<<"$json"
[{"k1":"http://url","k2":null,"k3":"v3","k4":"v4"}]
答案 2 :(得分:0)
您的示例是常规的,因为每个值都以不需要的空间开头。如果这真的具有代表性,那么范围切片的简单地图就可以了:
gsub
这种方法具有朴实无华和易于理解的优点。如果您的示例与现实不匹配 - 零个或多个空格,嵌套数组等 - 那么您需要使用uploadForm=driver.find_element_by_xpath('//*[@id="react-root"]/section/nav/div/div/form/input')
driver.execute_script("arguments[0].style.height='auto'; arguments[0].style.visibility='visible';", uploadForm)
#makes form visible
submitForm = driver.find_element_by_xpath('//*[@id="react-root"]/section/nav/div/div/form')
#selects whole form
driver.execute_script("arguments[0].style.height='auto'; arguments[0].style.visibility='visible';", submitForm)
#unhides form as well
uploadForm.send_keys("/testman.JPG")
#sends the file path to the input section of form
submitForm.submit()
#attempts to submit form, causing the refresh
,条件等部署更全面的方法。