How to print specific value from specific key from JSON in Python












0















I wrote 2 functions so I can get champion ID knowing champion Name but then I wanted to get champion Name knowing champion ID but I cannot figure it out how to extract the name because of how the data structured.



"data":{"Aatrox":{"version":"8.23.1","id":"Aatrox","key":"266","name":"Aatrox"


so in my code I wrote ['data']['championName'(in this case Aatrox)]['key'] to get the champion ID/key. But how can I reverse it if for example I don't know the champion Name but champions ID. How can I get the champion Name if after writing ['data'] I need to write champion Name so I can go deeper and get all the champions info like ID, title etc..



link: http://ddragon.leagueoflegends.com/cdn/8.23.1/data/en_US/champion.json



Code:



def requestChampionData(championName):
name = championName.lower()
name = name.title()
URL = "http://ddragon.leagueoflegends.com/cdn/8.23.1/data/en_US/champion/" + name + ".json"
response = requests.get(URL)
return response.json()

def championID(championName):
championData = requestChampionData(championName)
championID = str(championData['data'][championName]['key'])
return championID









share|improve this question























  • It's rarely (like, never) a good idea to duplicate data in a database, JSON included. I suggest restructuring your JSON so that the champion name is in the innermost block with the rest of the data. That will meet both (and other) methods of accessing the data.

    – directive-41
    Nov 20 '18 at 7:40
















0















I wrote 2 functions so I can get champion ID knowing champion Name but then I wanted to get champion Name knowing champion ID but I cannot figure it out how to extract the name because of how the data structured.



"data":{"Aatrox":{"version":"8.23.1","id":"Aatrox","key":"266","name":"Aatrox"


so in my code I wrote ['data']['championName'(in this case Aatrox)]['key'] to get the champion ID/key. But how can I reverse it if for example I don't know the champion Name but champions ID. How can I get the champion Name if after writing ['data'] I need to write champion Name so I can go deeper and get all the champions info like ID, title etc..



link: http://ddragon.leagueoflegends.com/cdn/8.23.1/data/en_US/champion.json



Code:



def requestChampionData(championName):
name = championName.lower()
name = name.title()
URL = "http://ddragon.leagueoflegends.com/cdn/8.23.1/data/en_US/champion/" + name + ".json"
response = requests.get(URL)
return response.json()

def championID(championName):
championData = requestChampionData(championName)
championID = str(championData['data'][championName]['key'])
return championID









share|improve this question























  • It's rarely (like, never) a good idea to duplicate data in a database, JSON included. I suggest restructuring your JSON so that the champion name is in the innermost block with the rest of the data. That will meet both (and other) methods of accessing the data.

    – directive-41
    Nov 20 '18 at 7:40














0












0








0








I wrote 2 functions so I can get champion ID knowing champion Name but then I wanted to get champion Name knowing champion ID but I cannot figure it out how to extract the name because of how the data structured.



"data":{"Aatrox":{"version":"8.23.1","id":"Aatrox","key":"266","name":"Aatrox"


so in my code I wrote ['data']['championName'(in this case Aatrox)]['key'] to get the champion ID/key. But how can I reverse it if for example I don't know the champion Name but champions ID. How can I get the champion Name if after writing ['data'] I need to write champion Name so I can go deeper and get all the champions info like ID, title etc..



link: http://ddragon.leagueoflegends.com/cdn/8.23.1/data/en_US/champion.json



Code:



def requestChampionData(championName):
name = championName.lower()
name = name.title()
URL = "http://ddragon.leagueoflegends.com/cdn/8.23.1/data/en_US/champion/" + name + ".json"
response = requests.get(URL)
return response.json()

def championID(championName):
championData = requestChampionData(championName)
championID = str(championData['data'][championName]['key'])
return championID









share|improve this question














I wrote 2 functions so I can get champion ID knowing champion Name but then I wanted to get champion Name knowing champion ID but I cannot figure it out how to extract the name because of how the data structured.



"data":{"Aatrox":{"version":"8.23.1","id":"Aatrox","key":"266","name":"Aatrox"


so in my code I wrote ['data']['championName'(in this case Aatrox)]['key'] to get the champion ID/key. But how can I reverse it if for example I don't know the champion Name but champions ID. How can I get the champion Name if after writing ['data'] I need to write champion Name so I can go deeper and get all the champions info like ID, title etc..



link: http://ddragon.leagueoflegends.com/cdn/8.23.1/data/en_US/champion.json



Code:



def requestChampionData(championName):
name = championName.lower()
name = name.title()
URL = "http://ddragon.leagueoflegends.com/cdn/8.23.1/data/en_US/champion/" + name + ".json"
response = requests.get(URL)
return response.json()

def championID(championName):
championData = requestChampionData(championName)
championID = str(championData['data'][championName]['key'])
return championID






python json python-3.x python-requests






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 20 '18 at 7:06









BardBard

82




82













  • It's rarely (like, never) a good idea to duplicate data in a database, JSON included. I suggest restructuring your JSON so that the champion name is in the innermost block with the rest of the data. That will meet both (and other) methods of accessing the data.

    – directive-41
    Nov 20 '18 at 7:40



















  • It's rarely (like, never) a good idea to duplicate data in a database, JSON included. I suggest restructuring your JSON so that the champion name is in the innermost block with the rest of the data. That will meet both (and other) methods of accessing the data.

    – directive-41
    Nov 20 '18 at 7:40

















It's rarely (like, never) a good idea to duplicate data in a database, JSON included. I suggest restructuring your JSON so that the champion name is in the innermost block with the rest of the data. That will meet both (and other) methods of accessing the data.

– directive-41
Nov 20 '18 at 7:40





It's rarely (like, never) a good idea to duplicate data in a database, JSON included. I suggest restructuring your JSON so that the champion name is in the innermost block with the rest of the data. That will meet both (and other) methods of accessing the data.

– directive-41
Nov 20 '18 at 7:40












2 Answers
2






active

oldest

votes


















0














since python values are passed by reference you can make a new dict with keys as the champion id pointing to the values of the previous dict, that way you dont duplicate too much data. but be carefull if you change data in one dict the data will be changed in the other one too



def new_dict(d):
return { val["id"]:val for val in d.values() }





share|improve this answer































    0














    I solved my problem with this code:



    def championNameByID(id):
    championData = requestChampionData()
    allChampions = championData['data']
    for champion in allChampions:
    if id == allChampions[champion]['key']:
    championName = allChampions[champion]['name']
    return championName





    share|improve this answer

























      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53387867%2fhow-to-print-specific-value-from-specific-key-from-json-in-python%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      0














      since python values are passed by reference you can make a new dict with keys as the champion id pointing to the values of the previous dict, that way you dont duplicate too much data. but be carefull if you change data in one dict the data will be changed in the other one too



      def new_dict(d):
      return { val["id"]:val for val in d.values() }





      share|improve this answer




























        0














        since python values are passed by reference you can make a new dict with keys as the champion id pointing to the values of the previous dict, that way you dont duplicate too much data. but be carefull if you change data in one dict the data will be changed in the other one too



        def new_dict(d):
        return { val["id"]:val for val in d.values() }





        share|improve this answer


























          0












          0








          0







          since python values are passed by reference you can make a new dict with keys as the champion id pointing to the values of the previous dict, that way you dont duplicate too much data. but be carefull if you change data in one dict the data will be changed in the other one too



          def new_dict(d):
          return { val["id"]:val for val in d.values() }





          share|improve this answer













          since python values are passed by reference you can make a new dict with keys as the champion id pointing to the values of the previous dict, that way you dont duplicate too much data. but be carefull if you change data in one dict the data will be changed in the other one too



          def new_dict(d):
          return { val["id"]:val for val in d.values() }






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 20 '18 at 8:54









          oren revengeoren revenge

          170211




          170211

























              0














              I solved my problem with this code:



              def championNameByID(id):
              championData = requestChampionData()
              allChampions = championData['data']
              for champion in allChampions:
              if id == allChampions[champion]['key']:
              championName = allChampions[champion]['name']
              return championName





              share|improve this answer






























                0














                I solved my problem with this code:



                def championNameByID(id):
                championData = requestChampionData()
                allChampions = championData['data']
                for champion in allChampions:
                if id == allChampions[champion]['key']:
                championName = allChampions[champion]['name']
                return championName





                share|improve this answer




























                  0












                  0








                  0







                  I solved my problem with this code:



                  def championNameByID(id):
                  championData = requestChampionData()
                  allChampions = championData['data']
                  for champion in allChampions:
                  if id == allChampions[champion]['key']:
                  championName = allChampions[champion]['name']
                  return championName





                  share|improve this answer















                  I solved my problem with this code:



                  def championNameByID(id):
                  championData = requestChampionData()
                  allChampions = championData['data']
                  for champion in allChampions:
                  if id == allChampions[champion]['key']:
                  championName = allChampions[champion]['name']
                  return championName






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Nov 25 '18 at 8:06

























                  answered Nov 20 '18 at 12:31









                  BardBard

                  82




                  82






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53387867%2fhow-to-print-specific-value-from-specific-key-from-json-in-python%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      MongoDB - Not Authorized To Execute Command

                      How to fix TextFormField cause rebuild widget in Flutter

                      in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith