Как получить подробные данные ответа сервера JSON, проанализированные в списке / словаре в Python - PullRequest
0 голосов
/ 18 октября 2019

Я новичок в Python. Я пытался разобрать ответ, отправленный в качестве параметра в функцию.

Я пытался преобразовать функцию из Perl в Python.

Блок Perl выглядит примерно так:

sub fetchId_byusername
{
     my ($self,$resString,$name) =@_;
     my $my_id;
     my @arr = @{$json->allow_nonref->utf8->decode($resString)};
     foreach(@arr)
     {
          my %hash = %{$_};
          foreach my $keys (keys %hash)
          {
               $my_id = $hash{id} if($hash{name} eq $name);
          }
     }
     print "Fetched Id is : $my_id\n";
     return $my_id;

Часть, где анализируются данные JSON, беспокоит меня. Как мне написать это в python3.

Я пробовал что-то вроде

    def fetchID_byUsername(self, resString, name):
        arr = []
        user_id = 0
        arr = resString.content.decode('utf-8', errors="replace")
        for item in arr:
            temp_hash = {}
            temp_hash = item
            for index in temp_hash.keys():
                if temp_hash[name] == name:
                    user_id = temp_hash[id]
        print("Fetched  ID is: {}".format(user_id))
        return user_id

Теперь я не уверен, если это правильный способ сделать это.

Входные данные json выглядят примерно так:


[{"id":12345,"name":"11","email":"11@test.com","groups":[{"id":6967,"name":"Test1"},{"id":123456,"name":"E1"}],"department":{"id":3863,"name":"Department1"},"comments":"111","adminUser":false},{"id":123457,"name":"1234567","email":"1234567@test.com","groups":[{"id":1657,"name":"mytest"},{"id":58881,"name":"Service Admin"}],"department":{"id":182,"name":"Service Admin"},"comments":"12345000","adminUser":true}]

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Прежде всего импортируйте библиотеку json и используйте json.loads (), например:

import json

x = json.loads(json_feed) #This converts the json feed to a python dictionary
print(x["key"]) #values to "key"
0 голосов
/ 18 октября 2019

Ваш ввод json должен быть действительным python. Я изменил false на False и true на True. Если это строка в формате json, вы можете сделать

import json
data=json.loads(json_formatted_string_here) #data will be python dictionary herer

И попытаться сделать это так, просто повторяется, и когда найденное совпадение возвращает id

data=[{"id":12345,"name":"11","email":"11@test.com","groups":[{"id":6967,"name":"Test1"},{"id":123456,"name":"E1"}],"department":{"id":3863,"name":"Department1"},"comments":"111","adminUser":False},{"id":123457,"name":"1234567","email":"1234567@test.com","groups":[{"id":1657,"name":"mytest"},{"id":58881,"name":"Service Admin"}],"department":{"id":182,"name":"Service Admin"},"comments":"12345000","adminUser":True}]

def fetch_id_by_name(list_records,name):
    for record in list_records:
        if record["name"] == name:
            return record["id"]

print(fetch_id_by_name(data,"11"))
...