Reading & Parsing JSON Data With Python: Tutorial (2023)

Back to blog


Reading & Parsing JSON Data With Python: Tutorial (1)

Monika Maslauskaite



JSON is a common standard used by websites and APIs, and even natively supported by modern databases such as PostgreSQL. In this article, we’ll present a tutorial on how to handle JSON data with Python. Now, let’s start with the definition of JSON.

What is JSON?

JSON, or JavaScript Object Notation, is a format that uses text to store data objects. In other words, it is data structures for representing objects as text. Even though it’s derived from JavaScript, it has become a de facto standard of transferring objects.

This format is supported by most popular programming languages, including Python. Most commonly, JSON is used to transfer data objects by APIs. Here is an example of a JSON string:

{ "name": "United States", "population": 331002651, "capital": "Washington D.C.", "languages": [ "English", "Spanish" ]}

Link to GitHub

In this example, JSON data looks like a Python dictionary. Just like dictionaries, JSON contains data in key-value pairs. However, the JSON data can also be a string, a number, a boolean, or a list.

Before JSON became popular, XML had been the common choice to represent data objects in a text format. Here is an example of the same information in the XML format:

<?xml version="1.0" encoding="UTF-8"?><country> <name>United States</name> <population>331002651</population> <capital>Washington D.C.</capital> <languages> <language>English</language> <language>Spanish</language> </languages></country>

As evident here, JSON is lightweight. This is one of the primary reasons why JSON is so popular. If you want to read more about the JSON standard, head over to the official JSON website.

JSON in Python

Python supports JSON data natively. The Python json module is part of the Standard Library. The json module can handle the conversion of JSON data from JSON format to the equivalent Python objects such as dictionary and list. The JSON package can also convert Python objects into the JSON format.

The json module provides the functionality to write custom encoders and decoders, and there is no separate installation needed. You can find the official documentation for the Python JSON module here.

In the remainder of this tutorial, we will explore this package. We’re going to convert JSON to dictionary and list and the other way round. We’ll also explore how to handle custom classes.

Converting JSON string to Python object

JSON data is frequently stored in strings. This is a common scenario when working with APIs. The JSON data would be stored in string variables before it can be parsed. As a result, the most common task related to JSON is to parse the JSON string into the Python dictionary. The JSON module can take care of this task easily.

The first step would be importing the Python json module. This module contains two important functions – loads and load.

Note that the first method looks like a plural form, but it is not. The letter ‘S’ stands for ‘string’.

The helpful method to parse JSON data from strings is loads. Note that it is read as ‘load-s’. The ‘s’ stands for ‘string’ here. The other method load is used when the data is in bytes. This is covered at length in a later section.

Let’s start with a simple example. The instance of JSON data is as follows:

{ "name": "United States", "population": 331002651,}

Link to GitHub

JSON data can be stored as JSON string before it is parsed. Even though we can use Python’s triple quotes convention to store multi-line strings, we can remove the line breaks for readability.

(Video) Python Tutorial: Working with JSON Data using the json Module

# JSON stringcountry = '{"name": "United States", "population": 331002651}'print(type(country))

Link to GitHub

The output of this snippet will confirm that this is indeed a JSON string:

<class 'str'>

Link to GitHub

We can call the json.loads() method and provide this string as a parameter.

The output of this snippet will confirm that the JSON data, which was a string, is now a Python dictionary.

<class 'str'><class 'dict'>

Link to GitHub

This dictionary can be accessed as usual:

print(country_dict['name'])# OUTPUT: United States

Link to GitHub

It is important to note here that the json.loads() method will not always return a dictionary. The data type that is returned will depend on the input string. For example, this JSON string will return a list, not a dictionary.

countries = '["United States", "Canada"]'counties_list= json.loads(countries)print(type(counties_list))# OUTPUT: <class 'list'>

Link to GitHub

Similarly, if the JSON string contains true, it will be converted to Python equivalent boolean value, which is True.

import json bool_string = 'true'bool_type = json.loads(bool_string)print(bool_type)# OUTPUT: True

Link to GitHub

The following table shows JSON objects and the Python data types after conversion. For more details, see Python docs.

number (integer)int
number (real)float

Now, let’s move on to the next topic on parsing a JSON object to a Python object.

Converting JSON file to Python object

Reading JSON files to parse JSON data into Python data is very similar to how we parse the JSON data stored in strings. Apart from JSON, Python’s native open() function will also be required.

Instead of the JSON loads method, which reads JSON strings, the method used to read JSON data in files is load().

The load() method takes up a file object and returns the JSON data parsed into a Python object.

To get the file object from a file path, Python’s open() function can be used.

Save the following JSON data as a new file and name it united_states.json:

{ "name": "United States", "population": 331002651, "capital": "Washington D.C.", "languages": [ "English", "Spanish" ]}

Link to GitHub

Enter this Python script in a new file:

(Video) Python: parse JSON files

import jsonwith open('united_states.json') as f: data = json.load(f)print(type(data))

Link to GitHub

Running this Python file prints the following:

<class 'dict'>

In this example, the open function returns a file handle, which is supplied to the load method.

This variable data contains the JSON as a Python dictionary. This means that the dictionary keys can be checked as follows:

print(data.keys())# OUTPUT: dict_keys(['name', 'population', 'capital', 'languages'])

Link to GitHub

Using this information, the value of name can be printed as follows:

data['name']# OUTPUT: United States

In the previous two sections, we examined how JSON can be converted to Python objects. Now, it’s time to explore how to convert Python objects to JSON.

Converting Python object to JSON string

Converting Python objects to JSON objects is also known as serialization or JSON encoding. It can be achieved by using the function dumps(). It is read as dump-s and the letter S stands for string.

Here is a simple example. Save this code in a new file as a Python script:

import jsonlanguages = ["English","French"]country = { "name": "Canada", "population": 37742154, "languages": languages, "president": None,}country_string = json.dumps(country)print(country_string)

Link to GitHub

When this file is run with Python, the following output is printed:

{"name": "Canada", "population": 37742154, "languages": ["English", "French"], "president": null}

Link to GitHub

The Python object is now a JSON object. This simple example demonstrates how easy it is to parse a Python object to a JSON object. Note that the Python object was a dictionary. That’s the reason it was converted into a JSON object type. Lists can be converted to JSON as well. Here is the Python script and its output:

import jsonlanguages = ["English", "French"]languages_string = json.dumps(languages)print(languages_string)# OUTPUT: ["English", "French"]

Link to GitHub

It’s not just limited to a dictionary and a list. string, int, float, bool and even None value can be converted to JSON.

Refer to the conversion table below for details. As you can see, only the dictionary is converted to json object type. For the official documentation, see this link.

list, tuplearray
int, float, intnumber

Writing Python object to a JSON file

The method used to write a JSON file is dump(). This method is very similar to the method dumps(). The only difference is that while dumps() returns a string, dump() writes to a file.

Here is a simple demonstration. This will open the file in writing mode and write the data in JSON format. Save this Python script in a file and run it.

import json# Tuple is encoded to JSON array.languages = ("English", "French")# Dictionary is encoded to JSON = { "name": "Canada", "population": 37742154, "languages": languages, "president": None,}with open('countries_exported.json', 'w') as f: json.dump(country, f)

Link to GitHub

When this code is executed using Python, countries_exported.json file is created (or overwritten) and the contents are the JSON.

However, you will notice that the entire JSON is in one line. To make it more readable, we can pass one more parameter to the dump() function as follows:

json.dump(country, f, indent=4)
(Video) JSON in Python || Python Tutorial || Learn Python Programming

This time when you run the code, it will be nicely formatted with indentation of 4 spaces:

{ "languages": [ "English", "French" ], "president": null, "name": "Canada", "population": 37742154}

Link to GitHub

Note that this indent parameter is also available for JSON dumps() method. The only difference between the signatures of JSON dump() and JSON dumps() is that dump() needs a file object.

Converting custom Python objects to JSON objects

Let’s examine the signature of dump() method:

dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw)

Let’s focus on the parameter cls.

If no Class is supplied while calling the dump method, both the dump() and dumps() methods default to the JSONEncoder class. This class supports the standard Python types: dict, list, tuple, str, int, float, True, False, and None.

If we try to call the json.loads() method on any other type, this method will raise a TypeError with a message: Object of type <your_type> is not JSON serializable.

Save the following code as a Python script and run it:

import jsonclass Country: def __init__(self, name, population, languages): = name self.population = population self.languages = languages canada = Country("Canada", 37742154, ["English", "French"])print(json.dumps(canada))# OUTPUT: TypeError: Object of type Country is not JSON serializable

Link to GitHub

To convert the objects to JSON, we need to write a new class that extends JSONEncoder. In this class, the method default() should be implemented. This method will have the custom code to return the JSON.

Here is the example Encoder for the Country class. This class will help converting a Python object to a JSON object:

import json class CountryEncoder(json.JSONEncoder): def default(self, o): if isinstance(o, Country): # JSON object would be a dictionary.return { "name" :, "population": o.population, "languages": o.languages } else: # Base class will raise the TypeError. return super().default(o)

Link to GitHub

This code is simply returning a dictionary, after confirming that the supplied object is an instance of Country class, or calling the parent to handle the rest of the cases.

This class can now be supplied to the json.dump() as well as json.dumps() methods.

print(json.dumps(canada, cls=CountryEncoder))# OUTPUT: {“name": "Canada", "population": 37742154, "languages": ["English", "French"]}

Link to GitHub

Creating Python class objects from JSON objects

So far, we have discussed how json.load() and json.loads() methods can create a dictionary, list, and more. What if we want to read a JSON object and create a custom class object?

In this section, we will create a custom JSON Decoder that will help us create custom objects. This custom decoder will allow us to use the json.load() and json.loads() methods, which will return a custom class object.

We will work with the same Country class that we used in the previous section. Using a custom encoder, we were able to write code like this:

# Create an object of class Countrycanada = Country("Canada", 37742154, ["English", "French"])# Use json.dump() to create a JSON file in writing modewith open('canada.json','w') as f: json.dump(canada,f, cls=CountryEncoder)

Link to GitHub

If we try to parse this JSON file using the json.load() method, we will get a dictionary:

with open('canada.json','r') as f: country_object = json.load(f)# OUTPUT: <type ‘dict'>

Link to GitHub

To get an instance of the Country class instead of a dictionary, we need to create a custom decoder. This decoder class will extend JSONDecoder. In this class, we will be writing a method that will be object_hook. In this method, we will create the object of Country class by reading the values from the dictionary.

Apart from writing this method, we would also need to call the __init__ method of the base class and set the value of the parameter object_hook to this method name. For simplicity, we can use the same name.

import json class CountryDecoder(json.JSONDecoder): def __init__(self, object_hook=None, *args, **kwargs): super().__init__(object_hook=self.object_hook, *args, **kwargs) def object_hook(self, o): decoded_country = Country( o.get('name'), o.get('population'), o.get('languages'), ) return decoded_country

Link to GitHub

Note that we are using the .get() method to read dictionary keys. This will ensure that no errors are raised if a key is missing from the dictionary.

(Video) JSON Tutorial Part-7 | How To Read Data from JSON File in Python | JSON library in python

Finally, we can call the json.load() method and set the cls parameter to CountryDecoder class.

with open('canada.json','r') as f: country_object = json.load(f, cls=CountryDecoder)print(type(country_object))# OUTPUT: <class ‘Country'>

Link to GitHub

That’s it! We now have a custom object created directly from JSON.

Loading vs dumping

The Python JSON module has four key functions: read(), reads(), load(), and loads(). It often becomes confusing to remember these functions. The most important thing to remember is that the letter ‘S’ stands for String. Also, read the letter ‘s’ separately in the functions loads() and dumps(), that is, read loads as load-s and read dumps() as dump-s.

Here is a quick table to help you remember these functions:



In this tutorial, we explored reading and writing JSON data using Python. Knowing how to work with JSON data is essential, especially when working with websites. JSON is used to transfer and store data everywhere, including APIs, web scrapers, and modern databases like PostgreSQL.You can click here to find the complete code used in this article for your convenience.

Understanding JSON is crucial if you are working on a web scraping project that involves dynamic websites. Head over to our blog post for a practical example of JSON being useful for pages with infinite scroll.

About the author

Monika Maslauskaite

Former Content Manager

Monika Maslauskaite is a former Content Manager at Oxylabs. A combination of tech-world and content creation is the thing she is super passionate about in her professional path. While free of work, you’ll find her watching mystery, psychological (basically, all kinds of mind-blowing) movies, dancing, or just making up choreographies in her head.

All information on Oxylabs Blog is provided on an "as is" basis and for informational purposes only. We make no representation and disclaim all liability with respect to your use of any information contained on Oxylabs Blog or any third-party websites that may be linked therein. Before engaging in scraping activities of any kind you should consult your legal advisors and carefully read the particular website's terms of service or receive a scraping license.

Related articles

TutorialsData acquisitionGuide to Scraping Data from Websites to Excel with Web QueryIveta Vistorskyte2022-11-10TutorialsData acquisitionScrapersGuide to Using Google Sheets for Basic Web ScrapingVytenis Kaubre2022-11-08TutorialsScrapersGuide to Extracting Website Data by Using Excel VBAYelyzaveta Nechytailo2022-10-19

Get the latest news from data gathering world

I’m interested


  • What is JSON?
  • JSON in Python
  • Converting JSON string to Python object
  • Converting JSON file to Python object
  • Converting Python object to JSON string
  • Writing Python object to a JSON file
  • Converting custom Python objects to JSON objects
  • Creating Python class objects from JSON objects
  • Loading vs dumping
  • Conclusion


How do you parse a JSON in Python? ›

If you have a JSON string, you can parse it by using the json. loads() method. The result will be a Python dictionary.

How does Python fetch JSON data? ›

Instead of the JSON loads method, which reads JSON strings, the method used to read JSON data in files is load(). The load() method takes up a file object and returns the JSON data parsed into a Python object. To get the file object from a file path, Python's open() function can be used.

How do you parse a JSON array in Python? ›

To parse a JSON data string to a Python object, use the json. loads() method of the built-in package named json. The json. loads() method parses the provided JSON data string and returns a Python dictionary containing all the data from the JSON.

What is JSON explain in detail JSON parsing in Python with suitable example? ›

Also, you will learn to convert JSON to dict and pretty print it. JSON (JavaScript Object Notation) is a popular data format used for representing structured data. It's common to transmit and receive data between a server and web application in JSON format. In Python, JSON exists as a string.

What is JSON parsing example? ›

Example - Parsing JSON

Use the JavaScript function JSON.parse() to convert text into a JavaScript object: const obj = JSON.parse('{"name":"John", "age":30, "city":"New York"}'); Make sure the text is in JSON format, or else you will get a syntax error.

What are the methods to parse JSON? ›

The JSON.parse() method parses a JSON string, constructing the JavaScript value or object described by the string. An optional reviver function can be provided to perform a transformation on the resulting object before it is returned.

How do you parse data in Python? ›

Parsing text in complex format using regular expressions
  1. Step 1: Understand the input format. 123. ...
  2. Step 2: Import the required packages. We will need the Regular expressions module and the pandas package. ...
  3. Step 3: Define regular expressions. ...
  4. Step 4: Write a line parser. ...
  5. Step 5: Write a file parser. ...
  6. Step 6: Test the parser.
7 Jan 2018

What is JSON data parsing? ›

JSON parsing is the process of converting a JSON object in text format to a Javascript object that can be used inside a program. In Javascript, the standard way to do this is by using the method JSON.

What is the best way to work with JSON in Python? ›

Start by importing the json library. We use the function open to read the JSON file and then the method json. load() to parse the JSON string into a Python dictionary called superHeroSquad. That's it!

Is JSON easy to parse? ›

JSON is a data interchange format that is easy to parse and generate. JSON is an extension of the syntax used to describe object data in JavaScript.

How extract JSON data from text file in Python? ›

Read JSON file in Python
  1. Import json module.
  2. Open the file using the name of the json file witn open() function.
  3. Open the file using the name of the json file witn open() function.
  4. Read the json file using load() and put the json data into a variable.
11 Jun 2021

How do I read a JSON column in Python? ›

If you have a JSON in a string, you can read or load this into pandas DataFrame using read_json() function. By default, JSON string should be in Dict like format {column -> {index -> value}} . This is also called column orientation. Note that orient param is used to specify the JSON string format.

How do you parse multiple JSON objects in Python? ›

To Load and parse a JSON file with multiple JSON objects we need to follow below steps:
  1. Create an empty list called jsonList.
  2. Read the file line by line because each line contains valid JSON. ...
  3. Convert each JSON object into Python dict using a json. ...
  4. Save this dictionary into a list called result jsonList.
14 May 2021

What is JSON () in Python? ›

JavaScript Object Notation (JSON) is a standardized format commonly used to transfer data as text that can be sent over a network. It's used by lots of APIs and Databases, and it's easy for both humans and machines to read. JSON represents objects as name/value pairs, just like a Python dictionary.

Is JSON () the same as JSON parse? ›

The difference is: json() is asynchronous and returns a Promise object that resolves to a JavaScript object. JSON. parse() is synchronous can parse a string to (a) JavaScript object(s).

Can you parse a JSON file? ›

If you need to parse a JSON string that returns a dictionary, then you can use the json. loads() method. If you need to parse a JSON file that returns a dictionary, then you can use the json. load() method.

How do I read a JSON file? ›

Windows tools to open JSON file
  1. Notepad.
  2. Notepad++
  3. Microsoft Notepad.
  4. Microsoft WordPad.
  5. Mozilla Firefox.
  6. File Viewer Plus.
  7. Altova XMLSpy.

Why do we need to parse JSON? ›

A JSON parser can also ensure the data is valid JSON, which in turn ensures that malicious code can not be injected into your data, and executed on the client.

What is difference between JSON parse and JSON Stringify? ›

JSON. parse() is used for parsing data that was received as JSON; it deserializes a JSON string into a JavaScript object. JSON. stringify() on the other hand is used to create a JSON string out of an object or array; it serializes a JavaScript object into a JSON string.

Does JSON require a parser? ›

JSON as a string

json or profiles. json above, that file actually contains text in the form of a JSON object or array, which happens to look like JavaScript. Just like with text files, if you want to use JSON in your project, you'll need to parse or change it into something your programming language can understand.

What is parsing and parsing techniques? ›

Ans: Parsing (also known as syntax analysis) can be defined as a process of analyzing a text which contains a sequence of tokens, to determine its grammatical structure with respect to a given grammar.

Is Python good for parsing text? ›

Python has an in-built library for extracting patterns using regular expressions. Using this, we could build parsers that can be used on vast text data or any unstructured data.

What does parsing data mean in Python? ›

Data parsing is converting data from one format to another. Widely used for data structuring, it is generally done to make the existing, often unstructured, unreadable data more comprehensible.

What is an example of parsing? ›

To parse a phrase such as 'man bites dog' involves noting that the singular noun 'man' is the subject of the sentence, the verb 'bites' is the third person singular of the present tense of the verb 'to bite', and the singular noun 'dog' is the object of the sentence.

What is the process of parsing? ›

Parsing, which is the process of identifying tokens within a data instance and looking for recognizable patterns. The parsing process segregates each word, attempts to determine the relationship between the word and previously defined token sets, and then forms patterns from sequences of tokens.

Is parsing JSON faster than XML? ›

JSON is faster because it is designed specifically for data interchange. JSON encoding is terse, which requires less bytes for transit. JSON parsers are less complex, which requires less processing time and memory overhead. XML is slower, because it is designed for a lot more than just data interchange.

Is pandas good for JSON? ›

Parsing of JSON Dataset using pandas is much more convenient. Pandas allow you to convert a list of lists into a Dataframe and specify the column names separately.

Can Python work with JSON files? ›

Python Supports JSON Natively! Python comes with a built-in package called json for encoding and decoding JSON data.

Which database is best for JSON data? ›

The best database for JSON

A JSON database like MongoDB stores the data in a JSON-like format (binary JSON), which is the binary encoded version of JSON, and is optimized for performance and space. This makes the MongoDB database the best natural fit for storing JSON data.

What is the fastest JSON parser? ›

The simdjson library uses commonly available SIMD instructions and microparallel algorithms to parse JSON 4x faster than RapidJSON and 25x faster than JSON for Modern C++.

Which language is best for parsing? ›

I would suggest using Python or Perl. Parsing large text files with regular expressions is really fast.

Which is faster to read JSON or CSV? ›

CSV is easier to parse than JSON and is therefore potentially faster to write.

How extract specific data from text in Python? ›

How to extract specific portions of a text file using Python
  1. Make sure you're using Python 3.
  2. Reading data from a text file.
  3. Using "with open"
  4. Reading text files line-by-line.
  5. Storing text data in a variable.
  6. Searching text for a substring.
  7. Incorporating regular expressions.
  8. Putting it all together.
30 Jun 2020

How do I load a JSON string in Python? ›

Use the json.

loads() function. The json. loads() function accepts as input a valid string and converts it to a Python dictionary. This process is called deserialization – the act of converting a string to an object.

How do I load a JSON into a DataFrame? ›

The json_normalize() function is used to convert the JSON string into a DataFrame. You can load JSON string using json. loads() function. Pass JSON object to json_normalize() , which returns a Pandas DataFrame.

Is there a JSON data type in Python? ›

The “json” package allows us to convert python objects into JSON objects. Following is the syntax to install the “json” package in the python environment. Please note that the method of converting python objects into JSON is called serialization.

How do I read a JSON file in pandas? ›

Reading JSON Files using Pandas

To read the files, we use read_json() function and through it, we pass the path to the JSON file we want to read. Once we do that, it returns a “DataFrame”( A table of rows and columns) that stores data.

How does Python handle JSON response? ›

loads() method returns JSON object. Below is the process by which we can read the JSON response from a link or URL in python.
  1. Import required modules.
  2. Assign URL.
  3. Get the response of the URL using urlopen().
  4. Convert it to a JSON response using json. loads().
  5. Display the generated JSON response.
24 Feb 2021

How do you write JSON data to a file in Python? ›

Method 2: Writing JSON to a file in Python using json.dump()

Another way of writing JSON to a file is by using json. dump() method The JSON package has the “dump” function which directly writes the dictionary to a file in the form of JSON, without needing to convert it into an actual JSON object.

How is JSON data parsed? ›

JSON parsing is the process of converting a JSON object in text format to a Javascript object that can be used inside a program. In Javascript, the standard way to do this is by using the method JSON. parse() , as the Javascript standard specifies.

How do I read a JSON file into a DataFrame in Python? ›

To read the files, we use read_json() function and through it, we pass the path to the JSON file we want to read. Once we do that, it returns a “DataFrame”( A table of rows and columns) that stores data.

Can Python access JSON files? ›

Python Supports JSON Natively! Python comes with a built-in package called json for encoding and decoding JSON data.

What is the difference between JSON () and JSON parse ()? ›

The difference is: json() is asynchronous and returns a Promise object that resolves to a JavaScript object. JSON. parse() is synchronous can parse a string to (a) JavaScript object(s).

How does Python handle JSON data? ›

It's pretty easy to load a JSON object in Python. Python has a built-in package called json, which can be used to work with JSON data. It's done by using the JSON module, which provides us with a lot of methods which among loads() and load() methods are gonna help us to read the JSON file.

How do I convert a JSON file to readable? ›

How do I convert a JSON file to readable?
  1. Open JSON to String tool and Copy and Paste JSON Code in Input Text Editor.
  2. If you do have a JSON data file, you can upload the file using the Upload file button. ...
  3. Click on JSON to String button once data is available in Input Text Editor, via Paste, File, or URL.

How do I open a JSON file as a data frame? ›

Steps to Load JSON String into Pandas DataFrame
  1. Step 1: Prepare the JSON String. To start with a simple example, let's say that you have the following data about different products and their prices: ...
  2. Step 2: Create the JSON File. ...
  3. Step 3: Load the JSON File into Pandas DataFrame.
5 Nov 2022


1. How To Use JSON In Python
(Tech With Tim)
2. Parsing JSON Using Python Requests
3. Json Parsing In Python || Iterate Over Json Array in python || Json Library in Python
(KB Tutorials)
4. How to Parse JSON in Python - JSON Tutorial for Python Beginners
(Coding Under Pressure)
5. Read and Write JSON data with Python
6. How to Write Python Scripts to Analyze JSON APIs and Sort Results
(Corey Schafer)
Top Articles
Latest Posts
Article information

Author: Prof. Nancy Dach

Last Updated: 03/05/2023

Views: 5577

Rating: 4.7 / 5 (77 voted)

Reviews: 92% of readers found this page helpful

Author information

Name: Prof. Nancy Dach

Birthday: 1993-08-23

Address: 569 Waelchi Ports, South Blainebury, LA 11589

Phone: +9958996486049

Job: Sales Manager

Hobby: Web surfing, Scuba diving, Mountaineering, Writing, Sailing, Dance, Blacksmithing

Introduction: My name is Prof. Nancy Dach, I am a lively, joyous, courageous, lovely, tender, charming, open person who loves writing and wants to share my knowledge and understanding with you.