Ошибка Pyjq при попытке разбить строку, чтобы выбрать последнее слово - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь вырезать последнее слово из значения ключа json, используя .split()[-1] с pyjq, но не удается с ошибкой: jq: error: syntax error, unexpected '('

Ключ / значение - «субъект»: «У пользователя есть идентификатор пользователя: 2432343f3f-34kfert-343mn5788886»

JSON:

[
    {
        "id": "The user has user id: 76e195fa-67f1-4ea6-bb0e-29c123855978",
        "date": "2018-11-01T08:41:53Z"
    },
    {
        "id": "The user has user id: 195fa76e-67f1-4ea6-bb0e-5597829c1238",
        "date": "2018-10-31T14:43:04Z"
    }
]

response_read = open('my.json', 'r')
response_read_parsed = json.loads(response_read.read())
rule = pyjq.all('.value[] | { "id": .["subject"].split()[-1], "date": .receivedDateTime }', response_read_parsed)

Но этот подход работает, если я пишу без pyjq

myid= (response_read_parsed['subject'].split()[-1])
print json.dumps(myid, indent=4)

Поскольку есть несколько записей, как указано выше, я решил отфильтровать с помощью pyjq.

Есть ли какая-то ошибка, которую я сделал? Я не могу понять это до сих пор. Пожалуйста помоги. Большое спасибо.

1 Ответ

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

jq's split требует аргумент, который должен быть допустимой строкой JSON. В вашем случае вы можете использовать splits вместо этого, так как он принимает аргумент регулярного выражения. Однако splits создает поток, поэтому вы, вероятно, захотите написать что-то вроде:

.value[]
| { "id": [.["subject"] | splits("  *")][-1],
    "date": .receivedDateTime }
...