简体   繁体   中英

Parse JSON from CURL output using python

I am trying to get value of id ie "id": 59 which is in the curl output in form of json. Below is the curl output in 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"}}]

I am using python to parse the json and get the value of id. I have tried the following command to do the same but got an error.

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:

错误

Can anyone help me the correct python command to get the value of id. Thanks in advance.

The JSON contains an array of objects but you are treating it like it is a single object:

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

You're basically saying "here is a collection of objects, give me the ID of the object" . It doesn't make sense.

If you assume you only ever want the ID of the first object in the array, you can use this:

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

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"])'

您必须编写print(json.load(sys.stdin)[0]["id"])因为 json 响应是字典列表,而不是字典。

Since you also tagged Python Requests , your CURL command could be translated to:

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)

Then you can get the id value from the JSON Response Content with response.json()[0]["id"] . This uses the built-in JSON decoder to convert the JSON response to a list of dictionaries.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM