Home > OS >  How to formatting a Json content type?
How to formatting a Json content type?

Time:07-15

I need to extract only the content of the operations of the following json:

{"entries":[{"description":"Text transform on 101 cells in column Column 2: value.toLowercase()","operation":{"op":"core/text-transform","engineConfig":{"facets":[],"mode":"row-based"},"columnName":"Column 2","expression":"value.toLowercase()","onError":"keep-original","repeat":false,"repeatCount":10,"description":"Text transform on cells in column Column 2 using expression value.toLowercase()"}},{"description":"Text transform on 101 cells in column Column 6: value.toDate()","operation":{"op":"core/text-transform","engineConfig":{"facets":[],"mode":"row-based"},"columnName":"Column 6","expression":"value.toDate()","onError":"keep-original","repeat":false,"repeatCount":10,"description":"Text transform on cells in column Column 6 using expression value.toDate()"}}]}

It should look like this:

[{"op": "core/text-transform", "engineConfig": {"facets": [], "mode": "row-based"}, "columnName": "Column 2", "expression": "value.toLowercase()", "onError": "keep-original", "repeat": "false", "repeatCount": 10, "description": "Text transform on cells in column Column 2 using expression value.toLowercase()"}, {"op": "core/text-transform", "engineConfig": {"facets": [], "mode": "row-based"}, "columnName": "Column 6", "expression": "value.toDate()", "onError": "keep-original", "repeat": "false", "repeatCount": 10, "description": "Text transform on cells in column Column 6 using expression value.toDate()"}]

I tried to use this code:

import json
operations = [{"description":"Text transform on 101 cells in column Column 2: value.toLowercase()","operation":{"op":"core/text-transform","engineConfig":{"facets":[],"mode":"row-based"},"columnName":"Column 2","expression":"value.toLowercase()","onError":"keep-original","repeat":"false","repeatCount":10,"description":"Text transform on cells in column Column 2 using expression value.toLowercase()"}},{"description":"Text transform on 101 cells in column Column 6: value.toDate()","operation":{"op":"core/text-transform","engineConfig":{"facets":[],"mode":"row-based"},"columnName":"Column 6","expression":"value.toDate()","onError":"keep-original","repeat":"false","repeatCount":10,"description":"Text transform on cells in column Column 6 using expression value.toDate()"}}]
new_operations = []

for operation in operations:
  new_operations.append(operation["operation"])

x = json.dumps(new_operations)
print(x)

However, I must manually place quotes in the words like "fake" and also remove the first "entries" part for it to work. Does anyone know how to do it automatically?

CodePudding user response:

IIUC you can do it like this. Read it as json data, extract the parts you want and dump it back to json.

with open('your-json-data.json') as j:
    data = json.load(j)

new_data = []
for dic in data['entries']:
    for key,value in dic.items():
        if key == 'operation':
            dic = {k:v for k,v in value.items()}
            new_data.append(dic)

x = json.dumps(new_data)
print(x)

Output:

[
    {
        "op":"core/text-transform",
        "engineConfig":{
            "facets":[              
            ],
            "mode":"row-based"
        },
        "columnName":"Column 2",
        "expression":"value.toLowercase()",
        "onError":"keep-original",
        "repeat":false,
        "repeatCount":10,
        "description":"Text transform on cells in column Column 2 using expression value.toLowercase()"
    },
    {
        "op":"core/text-transform",
        "engineConfig":{
            "facets":[                
            ],
            "mode":"row-based"
        },
        "columnName":"Column 6",
        "expression":"value.toDate()",
        "onError":"keep-original",
        "repeat":false,
        "repeatCount":10,
        "description":"Text transform on cells in column Column 6 using expression value.toDate()"
    }
]
  • Related