Home > Enterprise >  how do I access this json data in python?
how do I access this json data in python?

Time:11-02

hi I'm pretty new at coding and I was trying to create a program in python that reads and save in another file the data inside a json file (not everything, just what I want). I googled how to parse data but there's something I don't understand.

that's a part of the json file:

`

{
 "profileRevision": 548789,
 "profileId": "campaign",
 "profileChangesBaseRevision": 548789,
 "profileChanges": [
  {
   "changeType": "fullProfileUpdate",
   "profile": {
    "_id": "2da4f079f8984cc48e84fc99dace495d",
    "created": "2018-03-29T11:02:15.190Z",
    "updated": "2022-10-31T17:34:43.284Z",
    "rvn": 548789,
    "wipeNumber": 9,
    "accountId": "63881e614ef543b2932c70fed1196f34",
    "profileId": "campaign",
    "version": "refund_teddy_perks_september_2022",
    "items": {
     "8ec8f13f-6bf6-4933-a7db-43767a055e66": {
      "templateId": "Quest:heroquest_loadout_constructor_2",
      "attributes": {
       "quest_state": "Claimed",
       "creation_time": "min",
       "last_state_change_time": "2019-05-18T16:09:12.750Z",
       "completion_complete_pve03_diff26_loadout_constructor": 300,
       "level": -1,
       "item_seen": true,
       "sent_new_notification": true,
       "quest_rarity": "uncommon",
       "xp_reward_scalar": 1
      },
      "quantity": 1
     },
     "6940c71b-c74b-4581-9f1e-c0a87e246884": {
      "templateId": "Worker:workerbasic_sr_t01",
      "attributes": {
       "gender": "2",
       "personality": "Homebase.Worker.Personality.IsDreamer",
       "level": 1,
       "item_seen": true,
       "squad_slot_idx": -1,
       "portrait": "WorkerPortrait:IconDef-WorkerPortrait-Dreamer-F02",
       "building_slot_used": -1,
       "set_bonus": "Homebase.Worker.SetBonus.IsMeleeDamageLow"
     }
    }
   }
  ]
 }

`

I can access profileChanges. I wrote this to create another json file with only the profileChanges things:

`

myjsonfile= open("file.json",'r') 
        jsondata=myjsonfile.read() 
        obj=json.loads(jsondata)  
        ciso=obj['profileChanges']
        for i in ciso:
            print(i)
        with open("file2", "w") as outfile:
            json.dump( ciso, outfile, indent=1)

the issue I have is that I can't access "profile" (inside profileChanges) in the same way by parsing the new file and I have no idea on how to do it

CodePudding user response:

Access to JSON or dict element is realized by list indexes, please look at below example:

a = [
  {
    "friends": [
      {
        "id": 0,
        "name": "Reba May"
      }
    ],
    "greeting": "Hello, Doris Gallagher! You have 2 unread messages.",
    "favoriteFruit": "strawberry"
  },
]

b = a['friends']['id] # b = 0

CodePudding user response:

I've added a couple of closing braces to make your snippet valid json:

s = '''{
 "profileRevision": 548789,
 "profileId": "campaign",
 "profileChangesBaseRevision": 548789,
 "profileChanges": [
  {
   "changeType": "fullProfileUpdate",
   "profile": {
    "_id": "2da4f079f8984cc48e84fc99dace495d",
    "created": "2018-03-29T11:02:15.190Z",
    "updated": "2022-10-31T17:34:43.284Z",
    "rvn": 548789,
    "wipeNumber": 9,
    "accountId": "63881e614ef543b2932c70fed1196f34",
    "profileId": "campaign",
    "version": "refund_teddy_perks_september_2022",
    "items": {
     "8ec8f13f-6bf6-4933-a7db-43767a055e66": {
      "templateId": "Quest:heroquest_loadout_constructor_2",
      "attributes": {
       "quest_state": "Claimed",
       "creation_time": "min",
       "last_state_change_time": "2019-05-18T16:09:12.750Z",
       "completion_complete_pve03_diff26_loadout_constructor": 300,
       "level": -1,
       "item_seen": true,
       "sent_new_notification": true,
       "quest_rarity": "uncommon",
       "xp_reward_scalar": 1
      },
      "quantity": 1
     },
     "6940c71b-c74b-4581-9f1e-c0a87e246884": {
      "templateId": "Worker:workerbasic_sr_t01",
      "attributes": {
       "gender": "2",
       "personality": "Homebase.Worker.Personality.IsDreamer",
       "level": 1,
       "item_seen": true,
       "squad_slot_idx": -1,
       "portrait": "WorkerPortrait:IconDef-WorkerPortrait-Dreamer-F02",
       "building_slot_used": -1,
       "set_bonus": "Homebase.Worker.SetBonus.IsMeleeDamageLow"
     }
    }
   }
   }
   }
  ]
 }
'''
d = json.loads(s)
print(d['profileChanges'][0]['profile']['version'])

This prints refund_teddy_perks_september_2022

Explanation:

  • d is a dict
  • d['profileChanges'] is a list of dicts
  • d['profileChanges'][0] is the first dict in the list
  • d['profileChanges'][0]['profile'] is a dict
  • d['profileChanges'][0]['profile']['version'] is the value of version key in the profile dict in the first entry of the profileChanges list.

CodePudding user response:

**arquivo.json**

{
  "profileRevision": 548789,
  "profileId": "campaign",
  "profileChangesBaseRevision": 548789,
  "profileChanges": [
   {
    "changeType": "fullProfileUpdate",
    "profile": {
     "_id": "2da4f079f8984cc48e84fc99dace495d",
     "created": "2018-03-29T11:02:15.190Z",
     "updated": "2022-10-31T17:34:43.284Z",
     "rvn": 548789,
     "wipeNumber": 9,
     "accountId": "63881e614ef543b2932c70fed1196f34",
     "profileId": "campaign",
     "version": "refund_teddy_perks_september_2022",
     "items": {
      "8ec8f13f-6bf6-4933-a7db-43767a055e66": {
       "templateId": "Quest:heroquest_loadout_constructor_2",
       "attributes": {
        "quest_state": "Claimed",
        "creation_time": "min",
        "last_state_change_time": "2019-05-18T16:09:12.750Z",
        "completion_complete_pve03_diff26_loadout_constructor": 300,
        "level": -1,
        "item_seen": true,
        "sent_new_notification": true,
        "quest_rarity": "uncommon",
        "xp_reward_scalar": 1
       },
       "quantity": 1
      },
      "6940c71b-c74b-4581-9f1e-c0a87e246884": {
       "templateId": "Worker:workerbasic_sr_t01",
       "attributes": {
        "gender": "2",
        "personality": "Homebase.Worker.Personality.IsDreamer",
        "level": 1,
        "item_seen": true,
        "squad_slot_idx": -1,
        "portrait": "WorkerPortrait:IconDef-WorkerPortrait-Dreamer-F02",
        "building_slot_used": -1,
        "set_bonus": "Homebase.Worker.SetBonus.IsMeleeDamageLow"
      }
     }
    }
    }
  }
  ]
}

**arquivo.py**

import json

with open("arquivo.json") as stack:

    infos = (json.load(stack))

profile = infos["profileChanges"][0]['profile']

print("profile", profile)

A linguagem Python já inclui um módulo para manipulação desse tipo de arquivo e seu nome é json, com with garanto que o arquivo sera fechado depois de lido, com o as eu renomeio e guardo o arquivo.json dentro para poder usa-lo, faco a leitura do arquivo com o modulo json.load, agora temos todo o json pronto para manuseio, só acessar as chaves, espero ter ajudado. VQV.

  • Related