Рубрики
Без рубрики

Работа с данными JSON в Python

Итерация данных JSON, преобразование словаря Python в JSON, чтение данных JSON из файла, запись данных JSON в файл

Автор оригинала: Simran Singhal.

Как анализировать вложенные данные Json в Python? Как читать и записывать данные Json в файл

Если вы работаете с Json, включите модуль json в свой код.

 import json 

Преобразуйте объекты Python в строку Json в Python. А затем из строки Json в словарь Json.

import json

# a Python object (dict):
x = {
  "name": "John",
  "age": 30,
  "city": "New York"
}

# convert into JSON string:
y = json.dumps(x)
# convert json string to Json Dict
jsonDict = json.loads(y)

Теперь для доступа к любому ключу Json.

import json

x = {
  "name": "John",
  "age": 30,
  "city": "New York"
}
# convert into JSON string:
y = json.dumps(x)
# convert json string to Json Dict
jsonDict = json.loads(y)

print (jsonDict['name'])
print (jsonDict['age'])

Запишите данные json в файл

import json

data = {
'bill': 'tech',
'federer': 'tennis',
'ronaldo': 'football',
'people' : [ {
'name': 'Scott',
'website': 'stackabuse.com',
'from': 'Nebraska'}, 
{'name': 'Larry',
'website': 'google.com',
'from': 'Michigan' } ]
}

with open('data.txt', 'w') as outfile:
    json.dump(data, outfile)

Прочитайте данные из файла Json (мы будем читать тот же файл данных, в который мы сбрасываем данные выше)

import json

with open('data.txt') as json_file:
    data = json.load(json_file)
    print ("bill:", data['bill'])
    print ("")
    for person in data['people']:
        print("Name:", person['name'])
        print("Website:", person['website'])
        print("From:", person['from'])
        print("")

Перебирайте данные Json, которые имеют список, строку json, вложенный Json. Здесь я объясню, как работать со сложным Json и извлекать из него данные

import json

def checkList(ele, prefix):
    for i in range(len(ele)):
        if (isinstance(ele[i], list)):
            checkList(ele[i], prefix+"["+str(i)+"]")
        elif (isinstance(ele[i], str)):
            printField(ele[i], prefix+"["+str(i)+"]")
        else:
            checkDict(ele[i], prefix+"["+str(i)+"]")

def checkDict(jsonObject, prefix):
    for ele in jsonObject:
        if (isinstance(jsonObject[ele], dict)):
            checkDict(jsonObject[ele], prefix+"."+ele)

        elif (isinstance(jsonObject[ele], list)):
            checkList(jsonObject[ele], prefix+"."+ele)

        elif (isinstance(jsonObject[ele], str)):
            printField(jsonObject[ele],  prefix+"."+ele)

def printField(ele, prefix):
    print (prefix, ":" , ele)


data = {'field1': 'hello1',
        'field2': 'hello2',
        'NestedJson': {'Field': 'helloNested1',
                       'List': [{'f01': 'v01', 'f02': 'v02'},
                                          {'f11': 'v11'}],
                       'NestedNestedJson': {'Field1': 'value1',
                                            'Field2': 'value2'}
                        },
        'List': [{'a1': 'b1'},
                 {'a1': 'b1'}],
        'ElementList': ['ele1', 'ele2', 'ele3']
        }

#Iterating all the fields of the JSON
for element in data:
  #If Json Field value is a Nested Json
    if (isinstance(data[element], dict)):
        checkDict(data[element], element)
    #If Json Field value is a list
    elif (isinstance(data[element], list)):
        checkList(data[element], element)
    #If Json Field value is a string
    elif (isinstance(data[element], str)):
        printField(data[element], element)

Вывод приведенного выше кода:-

field1 : hello1
field2 : hello2
NestedJson.Field : helloNested1
NestedJson.List[0].f01 : v01
NestedJson.List[0].f02 : v02
NestedJson.List[1].f11 : v11
NestedJson.NestedNestedJson.Field1 : value1
NestedJson.NestedNestedJson.Field2 : value2
List[0].a1 : b1
List[1].a1 : b1
ElementList[0] : ele1
ElementList[1] : ele2
ElementList[2] : ele3