0

As the title suggests, I need to convert an NBT string into JSON with python. I have the following JSON object, (from the hypixel skyblock API, detailing player armour). I need to convert this NBT data into JSON for the items (armour pieces). How should I go about doing this?

{'type': 0, 'data': 'H4sIAAAAAAAAANWX3XLbRBTHN3FaHBcobacwXLSIQoZmUiVafVqBYXBsx1Zx5NR2PmyG8aykla1EljyynMR5B+64YrjPDNc8Qd6Dmw4PwBMwHFl22jR2mnYYSH1hSbt/7Tln95yfdlMIzaMZJ4UQmptFs441w86gG1m/74UzKZQISWsezVHPbEeKmVmUcA9clBgqURLNoFtbnhFQsk8Ml84k0HzRsei6S1o9kP+dQu9ZTq/rkgEMUvIDmoTWu+iz0xOlQEnAVE1oW2VOTyxREOCSfoxFKb2IvgJBNQyo1wrbUbe5hDm4qI/hujjULQnKsrSIHoMwGzghk20Tz6SxVl6ItfLCSKsuLCJ2rMyRDmmNlDg9ksLNSCvDuCCPXCxS4sb2yRIWcdwvcfIyL8WCHLWp16MjBVZjhYj5yLVPoxi6lFpxN8/HvQp03Y5uf4D+57/8DHc/wqTkYA5OT9z4f414+8w2OPYk8i5Hu2GbgemAmQ0YTdPGHeuUhG1oWieu63gtZhthaC0E/iHoz17fDPyQmqHjey/aam0/8HrRWGD64emJvN53XaZKQ2bN9/q9VaYO699i1lzft9CjaLWI4w3DUDh4YnaIu88Mg2MO245LozGUgd9nSEAZYvgHNBJL3EIkLm4uo48hTFg77uU3s6QL1h+AdQi5lC/k9VymUmdyW3ohX9aZtXK5Vk2gG6bv+gH648+/kmhOJx2Kvo78dWhg0pGbuYC0ILo13w97YFd+/utv0/5RCt3OH4UByYQwn0Y/pL3k2MQtnserPJ9e5UUuiZId33JsMINu2kNjCXTXAmvU95pOSDtNlx5QFwJIJNAH/W4rIBY9a7uRRPN+4LQcr0Za6F62klmvaXqhWahouWa1qK3XksMCulsvQ7TNXCVTKOvNYcQp9H5UbcQLO9QLezC4Fa1/sxevf2zwZjhcwLF1N3Q6JKRNA/Imsp5At+04N5p2nBtx683WMDfih1T3LDGiBijmuX4ffPoyLcu2oQhpFgvUZkWbYlbFFjza2EibvKlKggLxgU3aC0mniz5UVvAKjxlpVZSZzAZCs+hmXGUouo+Y8uQVprwNN+5N4oakSDE3VIW/ltxIS6N+KebGgwvcUMSRguMupcbnZ0MzFdqiXqyQYwE/ZM4EsMjTwXIZKdAX0FChe/0D6kFqvYydawQPZho8oKUABTeRH99O4UeJtqBgW/8DQuZei5APn21p2e+bY5DE9Lh/jh7jkC8A5LWwSAVn6xyLXkHDOXC84AQ1bUuSgROGyAEnDFtliWgqLMaibIiEMw1JgbGId+C4zX6PRh7MngPHHcyt8OIKzzGYW5U4ZnMiO5b+BXbcmcQOefRN5wEe15EdPKeMql/AU9ihyuMR3njH8Q7uFR5NK/dsMV+tbZYytfykgv9uSsFn25CHkCgh/e9L/qo7hE/O1fiLOC+v8qt96DGvEsphiTWpmoYC5k1WlVSZ5WzFVKksCzxnnavXj6QVLEVf+qhc+Snl+tPk4wOKfhdrNVXdh3QqH3o0gIA18EpO25atyjIrKqbBCnyasgSr4KRsYwn21oppqfAepGqXBqFDe/MoGdKjsB/Q3vCMAkuzTdw+Rb/TwVOusdvmrN2nrjnQZHiuVTm3rO11Fc3bHhhZTdY60F9cOy476QOrsC1axe1BY3ejb+y4/caOPqjvNLhSR3KtrHo2VonPHzZqraPGzrNDna906nuZgZ6r7Ou1RkcvPMONvafOxrGJ9Zru1o+hr9Nw9Jwp6Z36YaOjHdaPt4R6re3W9zRez+2LG/zWUaOWcexdrEIEVyeYqMT1j2VBvI4Ew9KIQZIoLCsTT03jc5WYVt781PQOMuzhNIYV86WNfG3MrG+mMKtI3Q64/Ra8eks03T+Ppmy5VMpnR3C6dw5OcQCXg+lqOwsBdg5UNjFrSoLFioSILDFEnk1LKm9Kom3LBn8BTOkhmPCqgF85gyQQ+gegXpQM5RAAAA=='}
Hchap
  • 58
  • 6

1 Answers1

2

Named Binary Tag (NBT) is a Minecraft specific format. See also: Python decoding, base64, nbt, gzip? what is it?

You can use a Python module like NBT:

  1. first install the module: pip install NBT
  2. then use it to convert from your JSON response:
from nbt import nbt

nbt_data = response.json().data  # save the base64 encoded NBT data
with open("downloaded.nbt", 'w') as f:
    f.write(nbt_data)  # write the data to a file to read or parse it

nbtfile = nbt.NBTFile("downloaded.nbt",'rb')  # open the downloaded file
print(nbtfile.name)   # might print something like 'Level'
hc_dev
  • 8,389
  • 1
  • 26
  • 38
  • 1
    I've figured out a solution using a combination of your answer and the clarifications given in the thread you suggested, so thanks. However, the NBT data I'm converting is from a string format. I ended up writing this function: def decode_inventory_data(raw): armour_pieces = ["Helmet", "Chestplate", "Leggings", "Boots"] data = nbt.nbt.NBTFile(fileobj = io.BytesIO(base64.b64decode(raw))) armour = [] for i in data.pretty_tree().split("\n"): – Hchap Dec 20 '22 at 22:29
  • @Hchap Wow, very useful approach to read directly from JSON-string `io.BytesIO(base64.b64decode( base64str ))` .. you should definitely post it as answer here – hc_dev Dec 21 '22 at 09:40