Поскольку это JSON, для его использования необходимо использовать инструменты, поддерживающие JSON.Если вы предпочитаете, например, awk, вы можете использовать расширение JSON для GNU awk.Это небольшое руководство.
Сначала загрузите и скомпилируйте соответствующие версии GNU awk, Gawkextlib и gawk-json .Это довольно просто, на самом деле, просто ./configure
и make
.Затем напишите некоторый код:
awk '
@load "json" # enable json extension
{
lines=lines $0 # read json file records and buffer to var lines
if(json_fromJSON(lines,data)==1) { # once the json is complete
for(i in data["info"]["version"]) # that seems to be an array so all elements
print data["info"]["version"][i] # are outputed
lines="" # once done with the first json object
} # reset the var for more lines
}' file
Выведите на этот раз:
2034.2
Объясните немного больше:
Структура файла JSON можетварьируются от одной строки до нескольких строк, например:
{"version":"4.9.123M","info":{"version":[2034.2],"description":""},"status":"OK"}
или:
{
"version": "4.9.123M",
"info": {
"version": [
2034.2
],
"description": ""
},
"status": "OK"
}
, поэтому нам нужно буферизовать строки JSON с помощью lines=lines $0
, пока не появится целый действительный объектв переменной lines
.Мы используем функцию расширения json_fromJSON()
, чтобы определить эту достоверность в if(json_fromJSON(lines,data)==1)
.При проверке объект распутывается и сохраняется в массиве data
.Для этого конкретного объекта структура массива:
data["version"]="4.9.123M"
data["info"]["version"][1]="2034.2"
data["info"]["description"]=""
data["status"]="OK"
Мы могли бы исследовать объект и получить некоторый вывод о нем с помощью этой функции сканирования рекурсивного массива:
awk '
@load "json"
function scan(a,p, q) { # a is array, p path to it, q is qnd *
if(isarray(a))
for(i in a) {
q=p (p==""?"":"->") i
scan(a[i],q)
}
else
print p ":" a
}
{
lines=lines $0
if(json_fromJSON(lines,data)==1)
scan(data) #
}' file.json
Вывод:
status:OK
version:4.9.123M
info->version->1:2034.2
info->description:
*) quick'n dirty
Вот краткий пример того, как вывести JSON из массива: https://stackoverflow.com/a/58109715/4162356