ФЭНДОМ


ИМЯ

json - readjson, writejson, JValue - чтение, запись и представление значений в виде JavaScript Object Notation

РЕЗЮМЕ

include "json.m";
json := load JSON JSON->PATH;

JValue: adt {
    pick{
    Object =>
        mem:   cyclic list of (string, ref JValue);
    Array =>
        a:     cyclic array of ref JValue;
    String =>
        s:     string;
    Int =>
        value: big;
    Real =>
        value: real;
    True or
    False or
    Null =>
    }
    isarray:   fn(v: self ref JValue): int;
    isfalse:   fn(v: self ref JValue): int;
    isint:     fn(v: self ref JValue): int;
    isnull:    fn(v: self ref JValue): int;
    isnumber:  fn(v: self ref JValue): int;
    isobject:  fn(v: self ref JValue): int;
    isreal:    fn(v: self ref JValue): int;
    isstring:  fn(v: self ref JValue): int;
    istrue:    fn(v: self ref JValue): int;
    copy:      fn(v: self ref JValue): ref Jvalue;
    eq:        fn(v: self ref JValue, v: ref JValue): int;
    get:       fn(v: self ref JValue, mem: string): ref JValue;
    set:       fn(v: self ref JValue, mem: string, value: ref JValue);
    text:      fn(v: self ref JValue): string;
};

init:      fn(bufio: Bufio);
readjson:  fn(input: ref Bufio->Iobuf): (ref JValue, string);
writejson: fn(output: ref Bufio->Iobuf, val: ref JValue): int;

jvarray:   fn(a: array of ref JValue): ref JValue.Array;
jvbig:     fn(b: big): ref JValue.Int;
jvfalse:   fn(): ref JValue.False;
jvint:     fn(i: int): ref JValue.Int;
jvnull:    fn(): ref JValue.Null;
jvobject:  fn(m: list of (string, ref JValue)): ref JValue.Object;
jvreal:    fn(r: real): ref JValue.Real;
jvstring:  fn(s: string): ref JValue.String;
jvtrue:    fn(): ref JValue.True;

ОПИСАНИЕ

JSON предусматривает представление значений, и операции по кодированию/декодированию JavaScript Object Notation (JSON) описанной в Internet RFC4627 кратко описанной в json(6).

Функция Init должна быть вызвана перед использованием людой другой функции этого модуля.Параметр bufio должен указывать на экземпляр bufio(2) который предоставляет параметр Iobuf используемый для ввода/вывода.

JValue является внутренним представлением значений передаваемых в кодировке JSON. Они представлены в pick adt:

JValue.False

Представляет значение false.

JValue.Null

Представляет значение null для любого типа.

JValue.True

Представляет значение true.

JValue.Int

Представлено как число big Limbo без дробной части.

JValue.Real

Представлено как Limbo real с дробной частью.

JValue.String

Представляет строку JavaScript состоящую из символов в Unicode от +U'0000' до +U'FFFF'.

JValue.Array

Представляеет JavaScript массив значений любого типа.

JValue.Object

Представляет тьюпл (член/свойство имя, значение) пар соответствующих значений объекта JavaScript, или ассоциативному массиву, или таблице проиндексированной по строкам. Имена членов должны быть уникальными значениями.

Readjson считывает одно значение в формате JSON из входного потока и возвращает тьюпл (val, err). В случае успеха, значение val является JValue, которое представлено которое представлено успешно считанным значением. В случае ошибки, val будет nil и err содержит диагностическое сообщение.

Writejson пишет в выходной поток в формате JSON представление значения v. Она возвращает 0 в случае успеха и -1 в случае ошибки (и устанавливает строку системной ошибки).

Простейшим способом создания нового JValue для последующего вывода является одна из следующих функций уровня модуля: jvarray, jvint, jvobject, jvstring, и т.д. Как значения в pick adt, JValue может быть проверено при помощи Limbo-оператора tagof и в случае подходящего варианта может быть получено выражением pick. JValue также поддерживает несколько групп общих операций, для компактного и аккуратного кода. Во-первых, набор функций запросов v.isX() возвращающих true если значение v является экземпляром JavaScript типа X (array, int, object, real, string, и т.д.). Числовым значением являются как int, так и real. Имеются следующие операции:


v.copy()

Возвращает (ссылается) на копию значения v. Копирование не рекурсивное.

v.eq(w)

Возвращает true если значения v и w являются равными, включая значения соответствующих под-компонентов, рекурсивная

v.get(mem)

Возвращает значение связанное с членом названным mem в v; возвращает null если такого нет.

v.set(mem, value)

Добавляет или изменяет значение связанное с членом mem в v, который должен быть JValue.Object ( вызывает исключение json: set non-object otherwise).

v.text()

Возвращает строку содержащую JSON представление v.

ИСХОДНЫЙ ТЕКСТ

/appl/lib/json.b

СМОТРИ ТАКЖЕ

sexprs(2), ubfa(2), json(6), sexprs(6), ubfa(6)
D Crockford, The application/json Media Type for JavaScript Object Notation (JSON), RFC4627.

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на ФЭНДОМЕ

Случайная вики