Parsing muilti dimensional Json array to Python
Solution 1
After you parse the JSON, you will end up with a Python dict. So, suppose the above JSON is in a string named input_data:
import json
# This converts from JSON to a python dict
parsed_input = json.loads(input_data)
# Now, all of your static variables are referenceable as keys:
secret = parsed_input['secret']
minutes = parsed_input['minutes']
link = parsed_input['link']
# Plus, you can get your bookmark collection as:
bookmark_collection = parsed_input['bookmark_collection']
# Print a list of names of the bookmark collections...
print bookmark_collection.keys() # Note this contains sublinks, so remove it if needed
# Get the name of the Boarding Pass bookmark:
print bookmark_collection['boarding_pass']['name']
# Print out a list of all bookmark links as:
# Boarding Pass
# * 1: http://www.1.com/
# * 2: http://www.2.com/
# ...
for bookmark_definition in bookmark_collection.values():
# Skip sublinks...
if bookmark_definition['name'] == 'sublinks':
continue
print bookmark_definition['name']
for bookmark in bookmark_definition['bookmarks']:
print " * %(name)s: %(link)s" % bookmark
# Get the sublink definition:
sublinks = parsed_input['bookmark_collection']['sublinks']
# .. and print them
print sublinks['name']
for link in sublinks['link']:
print ' *', link
Solution 2
Hmm, doesn't json.loads do the trick?
For example, if your data is in a file,
import json
text = open('/tmp/mydata.json').read()
d = json.loads(text)
# first level fields
print d['minutes'] # or 'secret' or 'link'
# the names of each of bookmark_collections's items
print d['bookmark_collection'].keys()
# the sublinks section, as a dict
print d['bookmark_collection']['sublinks']
The output of this code (given your sample input above) is:
20
[u'sublinks', u'free_link', u'boarding_pass']
{u'link': [u'http://www.1.com', u'http://www.2.com', u'http://www.3.com'], u'name': u'sublinks'}
Which, I think, gets you what you need?
Alex R
Updated on July 09, 2022Comments
-
Alex R almost 2 years
I'm in over my head, trying to parse JSON for my first time and dealing with a multi dimensional array.
{ "secret": "[Hidden]", "minutes": 20, "link": "http:\/\/www.1.com", "bookmark_collection": { "free_link": { "name": "#free_link#", "bookmarks": [ { "name": "1", "link": "http:\/\/www.1.com" }, { "name": "2", "link": "http:\/\/2.dk" }, { "name": "3", "link": "http:\/\/www.3.in" } ] }, "boarding_pass": { "name": "Boarding Pass", "bookmarks": [ { "name": "1", "link": "http:\/\/www.1.com\/" }, { "name": "2", "link": "http:\/\/www.2.com\/" }, { "name": "3", "link": "http:\/\/www.3.hk" } ] }, "sublinks": { "name": "sublinks", "link": [ "http:\/\/www.1.com", "http:\/\/www.2.com", "http:\/\/www.3.com" ] } } }
This is divided into 3 parts, the static data on my first dimension (secret, minutes, link) Which i need to get as seperate strings.
Then I need a dictionary per "bookmark collection" which does not have fixed names, so I need the name of them and the links/names of each bookmark.
Then there is the seperate sublinks which is always the same, where I need all the links in a seperate dictionary.
I'm reading about parsing JSON but most of the stuff I find is a simple array put into 1 dictionary. Does anyone have any good techniques to do this ?