Взяв список объектов JSON и поместив их в список Python - PullRequest
0 голосов
/ 23 ноября 2018

Я новичок в работе с JSON в Python.У меня есть программа, в которой я генерирую 10 символов (объектов), которые имеют несколько свойств.Я пишу это в файл, используя библиотеку Python JSON:

def saveCharsToFile(gameChars):
# Using a WITH operator for easy readability. creating and opening a file
# in write mode
with open("characterFile.json", "w") as write_file:
    # using the json.dump function to take the objects in the gameChars
    # list and serialise it into JSON
    json.dump([x.__dict__ for x in gameChars], write_file)
    # Tells the User that the file has been written

print("File 'characterFile.json' has been written to...")

Вот пример одного из типов классов, которые генерируют символ:

# A subclass for creating a Wizard character, inherits the Character class
# and adds the power, sAttackPwr, and speed properties
class wizard(character):
    def __init__(self, CharPower, CharSAttackPwr, CharSpeed):
        # Getting the properties from the inheritted character Base Class
        character.__init__(self, "W", 100)
        self.power = CharPower
        self.sAttackPwr = CharSAttackPwr
        self.speed = CharSpeed


# Base Class for creating an RPG character
class character:
    # __init__ method, creates the name, type, health properties
    def __init__(self, charType, charHealth):
        self.name = rndName()
        self.type = charType
        self.health = charHealth

Вотсодержимое файла, сохраненного с помощью saveCharsToFile:

[{"name": "ing low fu ", "type": "B", "health": 100, "power": 60, "sAttackPwr": 10, "speed": 60}, {"name": "en ar da ", "type": "W", "health": 100, "power": 50, "sAttackPwr": 70, "speed": 30}, {"name": "ar fu fu ", "type": "B", "health": 100, "power": 70, "sAttackPwr": 20, "speed": 50}, {"name": "da low en ", "type": "W", "health": 100, "power": 50, "sAttackPwr": 70, "speed": 30}, {"name": "da fu cha ", "type": "D", "health": 100, "power": 90, "sAttackPwr": 40, "speed": 50}, {"name": "da ing el ", "type": "W", "health": 100, "power": 50, "sAttackPwr": 70, "speed": 30}, {"name": "cha kar low ", "type": "D", "health": 100, "power": 90, "sAttackPwr": 40, "speed": 50}, {"name": "ar da el ", "type": "D", "health": 100, "power": 90, "sAttackPwr": 40, "speed": 50}, {"name": "da da ant ", "type": "B", "health": 100, "power": 60, "sAttackPwr": 10, "speed": 60}, {"name": "el ing kar ", "type": "B", "health": 100, "power": 70, "sAttackPwr": 20, "speed": 50}]

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

Это текущий способ чтения файла обратно в программу:

def openCharsToFile(gameChars):
    with open("characterFile.json") as read_file:
        y = json.load(read_file)
        for x in y:
            gameChars.insert[x, y]

        for z in gameChars:
            print(z.getStats())

Но когда я запускаю эту программу, я получаю следующую ошибку:

Traceback (most recent call last):
    File "rpgProblemSolving.py", line 342, in <module>
        main()
    File "rpgProblemSolving.py",  line 338, in main
        openCharsToFile(gameChars)
    File "rpgProblemSolving.py", line 305, in openCharsToFile
        gameChars.insert[x, y]
TypeError: 'builtin_function_or_method' object is not subscriptable

Если у кого-то есть какие-либо предложения, мы будем очень признательны, спасибо

1 Ответ

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

Полагаю, вы хотели просто добавить своего персонажа к существующим, поэтому используйте вместо него команду добавления.Ваша ошибка состояла в том, что у вас было [x, y] вместо (x, y), но даже если мы исправим это, это не имеет смысла, так как первый аргумент (x) вставки - это индекс списка (gameChars), где ваш y будетвставлять, что не имеет смысла, поскольку x - ваш персонаж, а y - ваш диктант.

Также часть, где вы печатаете свои символы print(z.getStats()) не будет работать, поскольку gameChars содержит только символы вформа словарей, которая, конечно, не имеет такой метод, как getStats().

def openCharsToFile(gameChars):
    with open("characterFile.json") as read_file:
        y = json.load(read_file)
        for x in y:
            gameChars.append(x)

        for z in gameChars:
            print(z.getStats())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...