-3

I am trying to amend the value of a node in my JSON, however, I keep getting "SyntaxError: invalid Syntax"

Every question I've looked at gives the same answer: 1, 2, 3. As do online article (example). Use (in psuedo terms) {jsonvariable}.["{Node Name}"] = {new value} however, this doesn't work, no matter what I try, the Python file refuses to run.

This makes me assume it's my implementation, but perhaps it because these answers are based on Python 2 and I'm (currently) using 3.7.5.

The JSON value I'm trying to update is a second level value, which might make a difference, however, Googling/Searching appears to never bring me to a example with that, and I know that clock.[id+".Status"] = "Finished doesn't work.

The JSON snippet looks like this:

{
    "0c2ad7d1-0fc9-47d5-99a2-2e7c8cff2a3d": {
        "Status": "Finished",
        "Status Time": "2020-05-17 16:48:12.584676",
        "Channel ID": 704635364039589941,
        "Active Player": 1,
        "Message ID": "",
        "Player1": {
            "Name": "Larnu",
            "ID": 357506009675333632,
            "Remaining": "01:00"
        },
        "Player2": {
            "Name": "Dolphin Bot",
            "ID": 357506009675333632,
            "Remaining": "01:00"
        }
    },
    "a370d674-6f1a-41be-86d2-9f8c73ab8ab0": {
        "Status": "Not Started",
        "Status Time": "2020-05-17 16:48:12.584676",
        "Channel ID": 704635364039589941,
        "Active Player": "1",
        "Message ID": "711605974779166730",
        "Player1": {
            "Name": "Larnu",
            "ID": 357506009675333632,
            "Remaining": "01:00:00"
        },
        "Player2": {
            "Name": "Dolphin Alpha",
            "ID": 704635572580253818,
            "Remaining": "01:00:00"
        }
    }
}

And the value I'm trying to change is Status in the a370d674-6f1a-41be-86d2-9f8c73ab8ab0 tree. The relevant part that's erroring is:

                with open("clocks.json","r+") as clocks_file:
                    clocks = json.load(clocks_file)
                    clock = clocks[clockid]
                    clock.['Status'] = "Finished"
                    

clockid would have been set previously (if the Python file ran) with the value a370d674-6f1a-41be-86d2-9f8c73ab8ab0.

0

2 Answers 2

2

If I understand correctly, I think you'll want to get rid of the . before the [. In other words:

clock['Status'] = 'Finished'

or, without assignment:

clocks[clockid]['Status'] = 'Finished'
Sign up to request clarification or add additional context in comments.

3 Comments

clocks[clockid]['Status'] is exactly what I need here. Didn't realise it was that simple.
Had to take the solution off. Doing this is malforming the JSON file. It's adding additional Braces } at the end.
OK, seems like using r+ does it. using w is fine. Weird... Why would r+ and w operate differently for write command...
1

You shouldn't use . before []. Try:

clock['Status'] = "Finished"

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.