N.Varela
N.Varela

Reputation: 910

Python: How to search and replace parts of a json file?

I'm new to Python and I would like to search and replace titles of IDs in a JSON-file. Normally I would use R for this Task, but how to do it in Python. Here a sample of my JSON code (with a Service ID and a layer ID). I'm interested in replacing the titles in the layer IDs:

 ...{"services": [
                  {
                     "id": "service",
                     "url": "http://...",
                     "title": "GEW",
                     "layers": [
                        {
                           "id": "0",
                           "title": "wrongTitle",
                        },
                        {
                           "id": "1",
                           "title": "againTitleWrong",
                        },
                     ],
                     "options": {}
                  },],}

For the replace I would use a table/csv like this:

serviceID   layerID   oldTitle         newTitle
service     0         wrongTitle       newTitle1
service     1         againTitleWrong  newTitle2
....

Do you have ideas? Thanks

Upvotes: 1

Views: 4736

Answers (3)

Young
Young

Reputation: 254

As other users suggested, check the JSON module will be helpful. Here gives a basic example on python2.7:

    import json
    j = '''{
        "services":
                [{
                 "id": "service",
                 "url": "http://...",
                 "title": "GEW",
                 "options": {},
                 "layers": [
                    {
                       "id": "0",
                       "title": "wrongTitle"
                    },
                    {
                       "id": "1",
                       "title": "againTitleWrong"
                    }
                 ]             
                }]
    }'''
    s = json.loads(j)
    s["services"][0]["layers"][0]["title"] = "new title"
    # save json object to file
    with open('file.json', 'w') as f:
        json.dump(s, f)

You can index the element and change its title according to your csv file, which requires the use of CSV module.

Upvotes: 0

Shaunak
Shaunak

Reputation: 18018

Here's an working example on repl.it.

Code:

import json
import io
import csv


### json input

input = """
{
  "layers": [
    {
      "id": "0",
      "title": "wrongTitle"
    },
    {
      "id": "1",
      "title": "againTitleWrong"
    }
  ]
}
"""

### parse the json
parsed_json = json.loads(input)


#### csv input

csv_input = """serviceID,layerID,oldTitle,newTitle
service,0,wrongTitle,newTitle1
service,1,againTitleWrong,newTitle2
"""

### parse csv and generate a correction lookup

parsed_csv = csv.DictReader(io.StringIO(csv_input))
lookup = {}

for row in parsed_csv:
  lookup[row["layerID"]] = row["newTitle"]

#correct and print json
layers = parsed_json["layers"]
for layer in layers:
   layer["title"] = lookup[layer["id"]]

parsed_json["layers"] = layers
print(json.dumps(parsed_json))   

Upvotes: 1

GrahamJ
GrahamJ

Reputation: 528

You don't say which version of Python you are using but there are built-on JSON parsers for the language.

For 2.x: https://docs.python.org/2.7/library/json.html

For 3.x: https://docs.python.org/3.4/library/json.html

These should be able to help you to parse the JSON and replace what you want.

Upvotes: 0

Related Questions