Импорт JSON данных из файла как экземпляров класса - PullRequest
1 голос
/ 08 мая 2020
class Company:
    def __init__(self, company_id, name):
        self.company_id = company_id
        self.name = name

У меня есть класс с именем Company (класс показан выше), и я пытаюсь добавить компании в эту программу, используя этот JSON файл:

[
  {
    "id": "companyA",
    "name": "Apple Farm"
  },
  {
    "id": "companyB",
    "name": "Buzzing Bees"
  },
  {
    "id": "companyC",
    "name": "Cat Corporate"
  },
  {
    "id": "companyD",
    "name": "Dog Dentists Limited"
  }
]

Прямо сейчас я, знаю, как добавить каждую компанию по отдельности, вот так:

c = Company(company[0]['id'], company[0]['name'])

Однако я хочу создать их все с помощью for l oop, который создает эти компании, и чтобы я мог получить к ним доступ с помощью их company_id.

Как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 08 мая 2020

Я не понимаю последнюю часть вопроса, в которой вы говорите, что хотите «вызывать их по идентификатору компании» ..

Если вы не хотите обрабатывать каждый объект независимо и ссылаться на него по их имени, тогда сохранение их в dict - это полезный способ. Понимание словаря будет самым простым способом сделать это.

company_objects = {company['id']: Company(company['id'], company['name']) for company in companies}

Теперь вы сможете получить к ним доступ как company_objects['companyA']

Если вы немного измените определение JSON, как показано ниже :

  {
    "company_id": "companyA",
    "name": "Apple Farm"
  }

Вы сможете даже оптимизировать понимание словаря, как показано ниже:

{company['company_id']: Company(**company) for company in companies}
0 голосов
/ 08 мая 2020

Сначала вы можете получить код JSON с помощью библиотеки json:

import json
with open("path/to/file.json") as jsonFile: # Replace "path/to/file.json" with the path to your JSON file
    companies = json.load(jsonFile)

Затем вы можете создать словарь для хранения компаний:

companyDict = {}

Затем вы перебираете все компании в файле JSON. Затем для каждого словаря в файле JSON создайте Company:

for company in companies:
    companyDict[company["id"]] = Company(company["id"], company["name"])

Затем вы можете получить доступ к своей компании следующим образом:

companyA = companyDict["companyA"] # You can replace the key with the company ID
0 голосов
/ 08 мая 2020

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

Используя предоставленный вами объект как таковой:

companies = [
  {
    "id": "companyA",
    "name": "Apple Farm"
  },
  {
    "id": "companyB",
    "name": "Buzzing Bees"
  },
  {
    "id": "companyC",
    "name": "Cat Corporate"
  },
  {
    "id": "companyD",
    "name": "Dog Dentists Limited"
  }
]

, вы можете создать класс для каждой компании как таковой:

company_classes = [Company(company.id, company.name) for company in companies]

будет создан список объектов компании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...