вторник, 4 декабря 2018 г.

Формат файлов JSON

Одним из широко распространённых форматов файлов для обмена данными в сети является текстовый формат json.

JSON позволяет изящно и понятно хранить сложные структуры данных (в т.ч. и последовательности, которые иногда называют массивами) в читабельном виде.

По сути json - это словарь (ассоциативный массив), элементами которых могут быть как словари (отличительный признак - {}, фигурные скобки), так и списки (отличительный признак - [], квадратные).

Пусть дан файл с расширением *.json (это обычный текстовый файл), содержащий следующее:

{
  "orderID": 12345,
  "shopperName": "Иван",
  "shopperEmail": "ivanov@example.com",
  "contents": [
    {
      "productID": 34,
      "productName": "Super product",
      "quantity": 1
    },
    {
      "productID": 56,
      "productName": "Super product",
      "quantity": 3
    }
  ],
  "orderCompleted": true
}

С помощью модуля ... json (неожиданно, неправда ли!?) в python его можно легко считать в словарь (dictionary).

Если в файле содержатся кириллические символы (русские буквы в просторечье), то не забудем вставить encoding="utf-8" в качестве аргумента для open.

Итого код для чтения json-файла выглядит так

import json

f = open('./templates/new.json',  encoding="utf-8")
dic = json.load(f)   # dic - словарь
f.close()

Т.к. dic - это просто словарь, то в него можно добавлять элементы. Добавим список с ключом "alpha". Модифицированный словарь запишем в виде json-файла.
Т.к. в словаре есть кириллица, то не забудем добавить аргумент ensure_ascii=False.

#Чтение, модификация и запись
import json

f = open('./templates/new.json',  encoding="utf-8")
dic = json.load(f)
print(dic.keys())
f.close()

dic['alpha'] = [1, 2, 4, 5]

with open('data.json', 'w') as outfile:
    json.dump(dic, outfile, ensure_ascii=False)

Комментариев нет:

Отправить комментарий

Как перевести UV в направление и скорость ветра? How to convert wind UV-components to direction and velocity?

 Всё просто.  def uv2dir(u, v):     '''     Источник:     https://github.com/blaylockbk/Ute_WRF/blob/master/functions/wind_calc...