Spec-Zone.ru › Pony

JSON-пакет

Пакет json предоставляет класс JsonDoc как контейнер для JSON-документа и как средство для парсинга из String и записи в него.

Представление JSON

JSON в Pony представлен следующими типами:

  • объект - JsonObject
  • массив - JsonArray
  • строка - String
  • целое число - I64
  • вещественное число - F64
  • булево значение - Bool
  • null - None

Типы коллекций JsonObject и JsonArray могут содержать любые другие JSON-структуры в произвольно вложенном виде.

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

Парсинг JSON

Для получения JSON из String в соответствующие структуры данных Pony необходимо использовать JsonDoc.parse. Это заполнит общедоступное поле JsonDoc.data, которое равно None, если parse ещё не вызывался.

Каждый вызов parse перезаписывает поле data, поэтому один экземпляр JsonDoc можно использовать для парсинга нескольких JSON-строк по одной.

let doc = JsonDoc
// parsing
doc.parse("{\"key\":\"value\", \"property\": true, \"array\":[1, 2.5, false]}")?

// extracting values from a JSON structure
let json: JsonObject  = doc.data as JsonObject
let key: String       = json.data("key")? as String
let property: Bool    = json.data("property")? as Bool
let array: JsonArray  = json.data("array")? as JsonArray
let first: I64        = array.data(0)? as I64
let second: F64       = array.data(1)? as F64
let last: Bool        = array.data(2)? as Bool

Отправка JSON

JsonDoc имеет возможность передачи ref, что означает, что он по умолчанию не может быть отправлен. Если вам нужно отправить его другому актору, вам необходимо восстановить его до возможности передачи (либо val, либо iso). Для простоты рекомендуется выполнить парсинг уже в блоке восстановления:

// sending an iso doc
let json_string = "{\"array\":[1, true, null]}"
let sendable_doc: JsonDoc iso = recover iso JsonDoc.>parse(json_string)? end
some_actor.send(consume sendable_doc)

// sending a val doc
let val_doc: JsonDoc val = recover val JsonDoc.>parse(json_string)? end
some_actor.send_val(val_doc)

При отправке iso JsonDoc важно восстановить его до ref на стороне получателя, чтобы иметь возможность правильно получить доступ к JSON-структурам в data.

Запись JSON

JSON записывается с помощью метода JsonDoc.string. Это сериализует содержимое поля data в String.

// building up the JSON data structure
let doc = JsonDoc
let obj = JsonObject
obj.data("key") = "value"
obj.data("property") = true
obj.data("array") = JsonArray.from_array([ as JsonType: I64(1); F64(2.5); false])
doc.data = obj

// writing to String
env.out.print(
  doc.string(where indent="  ", pretty_print=true)
)

Публичные типы

  • тип JsonType
  • класс JsonArray
  • класс JsonObject
  • класс JsonDoc

© 2016-2020, The Pony Developers
© 2014-2015, Causality Ltd.
Licensed under the BSD 2-Clause License.
https://stdlib.ponylang.io/json--index

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API