Franky
Franky

Reputation: 43

Update Json value in python

I am trying to specify a name for my google spreadsheet api. This is done in the 'title' key value. I have tried with the below but it adds a new key to the existing json. Is there a way to get to the "title": "" and update that value with the new_date item?

prev_date =  datetime.date.today()-datetime.timedelta(1)
new_date = str(prev_date.isoformat())
res = {
  "requests": [
    {
      "addSheet": {
        "properties": {
          "title": ""
        }
      }
    }
  ]
}
res['title'] =  new_date
print (res)

This is the output:

{'requests': [{'addSheet': {'properties': {'title': ''}}}], 'title': '2016-12-29'}

This is what I would like it to be:

{'requests': [{'addSheet': {'properties': {'title': '2016-12-29'}}}]}

Upvotes: 1

Views: 38575

Answers (3)

Franky
Franky

Reputation: 43

I now realize I can pass my variables directly in the json.

prev_date =  datetime.date.today()-datetime.timedelta(1)
new_date = str(prev_date.isoformat())
req = {
"requests": [
{
"addSheet": {
"properties": {
"title": new_date
}
}

Upvotes: 1

Avihoo Mamka
Avihoo Mamka

Reputation: 4786

From the structure you mentioned, the title key that you need to modify is more nested than what you are providing with.

You need to make the following change:

prev_date =  datetime.date.today()-datetime.timedelta(1)
new_date = str(prev_date.isoformat())
res = {
  "requests": [
    {
      "addSheet": {
        "properties": {
          "title": ""
        }
      }
    }
  ]
}
res['requests'][0]['addSheet']['properties']['title'] =  new_date
print (res)

Where:

  • 'requests' value is a list
  • 0 is the first item in the list (and the only item)
  • 'addSheet' is the key in the dictionary that is the value of the item in the list in the 0 index
  • 'properties' is the key in the above dictionary
  • 'title' is the key in the above dictonary, and the one you need upon your request

Upvotes: 8

TeaMonkie
TeaMonkie

Reputation: 169

You are incorrectly indexing your JSON object and adding a new key named 'title' in the root of the object, while you are trying to update the value inside the array. In your case, you should be accessing res['requests'][0]['addSheet']['properties']['title'] = new_date

Upvotes: 3

Related Questions