Как динамически анализировать объект JSON с помощью оболочки jq - PullRequest
0 голосов
/ 30 ноября 2018

У меня вопрос по поводу jq оболочки.Итак, мой JSON-объект:

{"1543446000": {"name": "John", "company": "foo"}, "1543359600": {"name": "Kate", "company": "bar"}}

Числа 1543446000 и 1543359600 являются метками времени UNIX.Как я могу проанализировать один из объектов JSON по метке времени с переменной оболочки?

Мой сценарий оболочки до сих пор:

#!/bin/sh
URL="https://pastebin.com/raw/w7awz7kZ"
export DATE=$(date -d "$today 0" +%s)
JSON=$(curl -H "Accept: application/json" $API_URL)
JSON=$(echo $JSON | jq --arg date $DATE '.$date')
echo $JSON

Кажется, не работает.Мое намерение состоит в том, чтобы выбрать внутренний объект JSON, описанный одной из меток времени, которые по сути являются полуночью сегодняшнего дня.Итак, я хочу выбрать сегодняшний набор данных.

Есть предложения?

Привет, Иннокбергер

1 Ответ

0 голосов
/ 30 ноября 2018

Вам необходимо использовать полный синтаксис для доступа к ключу, поскольку знак доллара не позволяет использовать более короткую форму.Сообщение об ошибке должно содержать это предложение.

$ jq --arg date 1543359600 '.$date' tmp.json
jq: error: syntax error, unexpected '$' (Unix shell quoting issues?) at <top-level>, line 1:
.$date
jq: error: try .["field"] instead of .field for unusually named fields at <top-level>, line 1:
.$date
jq: 2 compile errors

Обратите внимание на сообщение об ошибке

'try. ["Field"] вместо .field ".

Однако вам не понадобятся кавычки, так как вы указали бы буквальный ключ $date.

$ jq --arg date 1543359600 '.[$date]' tmp.json
{
  "name": "Kate",
  "company": "bar"
}
...