I have a txt file that presents some data as follow:
<name>:<surname>:<age> <name>:<surname>:<age> <name>:<surname>:<age> <name>:<surname>:<age> <name>:<surname>:<age>
The file is all structured in the same way, but I wanted to convert this file to a JSON format.
Based on my experience, I decided to go first with a split to have a list to play with:
import json
with open("test.txt") as raw_data:
    for line in raw_data:
        data = line.split(":")
        print(data)
This outputs the text as follow:
["name","surname", "age"] ["name","surname", "age"] ["name","surname", "age"] ["name","surname", "age"] ["name","surname", "age"]
which is perfect. Here is where I get a bit confused and don’t know exactly the best approach to start working with. How can I convert that output to something like:
[
{
  "Name": name,
  "Surname": surname,
  "Age": age
},
{
  "Name": name,
  "Surname": surname,
  "Age": age
},
{
  "Name": name,
  "Surname": surname,
  "Age": age
},
{
  "Name": name,
  "Surname": surname,
  "Age": age
}
]
Basically I would like to create those keys and assign them the value of the list and save it as a JSON file.
Advertisement
Answer
I would do something like this which is taking each item from the the line list you’ve created and create a dictionary from them. You can append this to a list and then just use a json.dumps to convert into JSON.
import json
list_in_json = []
with open("test.txt") as raw_data:
    for line in raw_data:
        data = line.strip().split(":")
        list_in_json.append({"name": data[0], "surname": data[1], "age": data[2]})
        
print(json.dumps(list_in_json, indent=4))
[
    {
        "name": "Johnny1",
        "surname": "Boy1",
        "age": "1"
    },
    {
        "name": "Johnny2",
        "surname": "Boy2",
        "age": "2"
    },
    {
        "name": "Johnny3",
        "surname": "Boy3",
        "age": "3"
    },
    {
        "name": "Johnny4",
        "surname": "Boy4",
        "age": "4"
    },
    {
        "name": "Johnny5",
        "surname": "Boy5",
        "age": "5"
    }
]
