Автор оригинала: 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