Разбор JSON с выхода CURL с использованием python - PullRequest
1 голос
/ 12 апреля 2020

Я пытаюсь получить значение идентификатора, т.е. "id": 59 , который находится в выводе curl в виде json. Ниже приведен вывод curl в json:

[{"id":59,"description":"This is a demo project","name":"Demo_Project","name_with_namespace":"sam / Demo_Project","path":"demo_project","path_with_namespace":"sam/demo_project","created_at":"2020-03-02T08:43:13.664Z","default_branch":"master","tag_list":[],"ssh_url_to_repo":"ssh://git@od-test.od.com:2222/sam/demo_project.git","http_url_to_repo":"https://od-test.od.com/gitlab/sam/demo_project.git","web_url":"https://od-test.od.com/gitlab/sam/demo_project","readme_url":"https://od-test.od.com/gitlab/sam/demo_project/blob/master/README.md","avatar_url":null,"star_count":0,"forks_count":0,"last_activity_at":"2020-04-09T09:28:09.860Z","namespace":{"id":2259,"name":"sam","path":"sam","kind":"user","full_path":"sam","parent_id":null,"avatar_url":"https://secure.gravatar.com/avatar/755db8ssqaq50dcc9d189c53523b?s=80\u0026d=identicon","web_url":"https://od-test.od.com/gitlab/sam"}}]

Я использую python для анализа json и получения значения id. Я попытался выполнить следующую команду , но получил ошибку.

curl --header "PRIVATE-TOKEN: 9999ayayayar66" "https://od-test.od.com/gitlab/api/v4/search?scope=projects&search=demo_project" | python -c 'import sys, json; print(json.load(sys.stdin)["id"])'

Ошибка:

Error

Может кто-нибудь помочь мне с правильной командой python, чтобы получить значение id. Заранее спасибо.

Ответы [ 4 ]

5 голосов
/ 12 апреля 2020

JSON содержит массив объектов, но вы рассматриваете его, как будто это один объект:

import sys, json; print(json.load(sys.stdin)["id"])

Вы в основном говорите "вот коллекция объектов, дайте мне идентификатор объекта ". Это не имеет смысла.

Если вы предполагаете, что вам нужен только идентификатор первого объекта в массиве, вы можете использовать это:

import sys, json; print(json.load(sys.stdin)[0]["id"])
3 голосов
/ 12 апреля 2020

Объект root из вас JSON на самом деле является массивом, поэтому сначала вы должны получить из него первый элемент:

curl --header "PRIVATE-TOKEN: 9999ayayayar66" "https://od-test.od.com/gitlab/api/v4/search?scope=projects&search=demo_project" | python -c 'import sys, json; print(json.load(sys.stdin)[0]["id"])'
3 голосов
/ 12 апреля 2020

Вы должны написать print(json.load(sys.stdin)[0]["id"]), потому что json response - это список словарей, а не словарь.

2 голосов
/ 12 апреля 2020

Поскольку вы также пометили Python Запросы , ваша команда CURL может быть переведена в:

import requests

headers = {
    'PRIVATE-TOKEN': '9999ayayayar66',
}

params = (
    ('scope', 'projects'),
    ('search', 'demo_project'),
)

response = requests.get('https://od-test.od.com/gitlab/api/v4/search', headers=headers, params=params)

Затем вы можете получить значение идентификатора из JSON Содержание ответа с response.json()[0]["id"]. При этом используется встроенный декодер JSON для преобразования ответа JSON в список словарей.

...