Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

JSON

Успадковує: Resource < RefCounted < Object

Помічник класу створення та оформлення даних JSON.

Опис

Клас JSON дозволяє конвертувати всі типи даних у рядок JSON і з нього. Це корисно для серіалізації даних, напр. щоб зберегти у файл або надіслати через мережу.

stringify() використовується для перетворення будь-якого типу даних у рядок JSON.

parse() використовується для перетворення будь-яких наявних даних JSON у Variant, який можна використовувати в Godot. У разі успішного аналізу скористайтеся data, щоб отримати Variant, і використовуйте @GlobalScope.typeof(), щоб перевірити, чи відповідає тип Варіанта тому, що ви очікуєте. Об’єкти JSON перетворюються на Dictionary, але дані JSON можна використовувати для зберігання Array, чисел, String і навіть просто логічних значень.

var data_to_send = ["a", "b", "c"]
var json_string = JSON.stringify(data_to_send)
# Збереження даних
# ...
# Отримати дані
var json = JSON.new()
var error = json.parse(json_string)
if error == OK:
    var data_received = json.data
    if typeof(data_received) == TYPE_ARRAY:
        print(data_received) # Друкує масив.
    else:
        print("Неочікувані дані")
else:
    print("Помилка аналізу JSON: ", json.get_error_message(), " in ", json_string, " at line ", json.get_error_line())

Крім того, ви можете аналізувати рядки за допомогою статичного методу parse_string(), але він не обробляє помилки.

var data = JSON.parse_string(json_string) # Повертає null, якщо розбір не вдався.

Примітка: Обидва методи аналізу не повністю відповідають специфікації JSON:

— Кінцеві коми в масивах або об’єктах ігноруються, замість того, щоб викликати помилку аналізатора.

  • Нові символи рядка та табуляції приймаються в рядкових літералах і обробляються як їхні відповідні керуючі послідовності \n і \t.

  • Числа аналізуються за допомогою String.to_float(), який зазвичай більш м’який, ніж специфікація JSON.

  • Певні помилки, такі як недійсні послідовності Unicode, не викликають помилки синтаксичного аналізатора. Натомість рядок очищається, а помилка реєструється на консолі.

Властивості

Variant

data

null

Методи

Variant

from_native(variant: Variant, full_objects: bool = false) static

int

get_error_line() const

String

get_error_message() const

String

get_parsed_text() const

Error

parse(json_text: String, keep_text: bool = false)

Variant

parse_string(json_string: String) static

String

stringify(data: Variant, indent: String = "", sort_keys: bool = true, full_precision: bool = false) static

Variant

to_native(json: Variant, allow_objects: bool = false) static


Описи властивостей

Variant data = null 🔗

  • void set_data(value: Variant)

  • Variant get_data()

Містить дані парсованих JSON у формі Variant.


Описи методів

Variant from_native(variant: Variant, full_objects: bool = false) static 🔗

Перетворює нативний тип механізму на JSON-сумісне значення.

За умовчанням об’єкти ігноруються з міркувань безпеки, якщо full_objects не має значення true.

Ви можете перетворити нативне значення на рядок JSON так:

func encode_data(значення, full_objects = false):
    return JSON.stringify(JSON.from_native(value, full_objects))

int get_error_line() const 🔗

Повертає 0, якщо останній виклик методу parse() був успішним, або номер рядка, де розбір завершився невдачею.


String get_error_message() const 🔗

Повертає порожній рядок, якщо останній виклик до parse() був успішним, або повідомлення про помилку, якщо це не вдалося.


String get_parsed_text() const 🔗

Повертає текст, проаналізований методом parse() (потрібно передати keep_text до методу parse()).


Error parse(json_text: String, keep_text: bool = false) 🔗

Надані аптемпти для оформлення json_text.

Повернутися до Error. Якщо парс був успішним, він повертає @GlobalScope.OK і результат можна отримати за допомогою data. Якщо неуспішне використання get_error_line() та get_error_message() для визначення джерела провалу.

Нестатичний варіант parse_string(), якщо ви хочете користуватись користувацькими помилками.

Додатковий аргумент Keep_text вказує на те, щоб зберегти копію оригінального тексту. Цей текст можна отримати пізніше, використовуючи функцію get_parsed_text() і використовується при збереженні ресурсу (замість створення нового тексту з data).


Variant parse_string(json_string: String) static 🔗

Приєднатися до парсеризації json_string, наданого та повертає дані паросвідченого. Повертаємо null, якщо не вдалося парсер.


String stringify(data: Variant, indent: String = "", sort_keys: bool = true, full_precision: bool = false) static 🔗

Перетворює змінну Variant на текст JSON та повертає результат. Корисно для серіалізації даних для зберігання або надсилання через мережу.

Примітка: Специфікація JSON не визначає цілочисельні або числові типи з плаваючою комою, а лише числовий тип number. Тому перетворення Variant на текст JSON перетворить усі числові значення на типи float.

Примітка: Якщо full_precision має значення true, під час перетворення чисел з плаваючою комою в рядок перетворюються ненадійні цифри на додаток до надійних, щоб гарантувати точне декодування.

Параметр indent контролює, чи буде щось відступне і як; його вміст буде використано там, де має бути відступ у виводі. Навіть пробіли, такі як " ", працюватимуть. \t та \n також можна використовувати для відступу табуляції або для створення нового рядка для кожного відступу відповідно.

Попередження: Нескінченні числа не підтримуються в JSON. Будь-які входження @GDScript.INF будуть замінені на 1e99999, а від'ємне значення @GDScript.INF буде замінено на -1e99999, але більшість JSON-парсерів правильно інтерпретуватимуть їх як нескінченність. @GDScript.NAN буде замінено на null і не буде інтерпретовано як NaN в JSON-парсерах. Якщо ви очікуєте нескінченні числа, спочатку передайте свої дані через from_native().

Приклад виводу:

## JSON.stringify(my_dictionary)
{"name":"my_dictionary","version":"1.0.0","entities":[{"name":"entity_0","value":"value_0"},{"name":"entity_1","value":"value_1"}]}

## JSON.stringify(my_dictionary, "\t")
{
    "name": "my_dictionary",
    "version": "1.0.0",
    "entities": [
        {
            "name": "entity_0",
            "value": "value_0"
        },
        {
            "name": "entity_1",
            "value": "value_1"
        }
    ]
}

## JSON.stringify(my_dictionary, "...")
{
..."name": "my_dictionary",
..."version": "1.0.0",
..."entities": [
......{
........."name": "entity_0",
........."value": "value_0"
......},
......{
........."name": "entity_1",
........."value": "value_1"
......}
...]
}

Variant to_native(json: Variant, allow_objects: bool = false) static 🔗

Перетворює JSON-сумісне значення, створене за допомогою from_native(), назад у рідні типи механізмів.

За замовчуванням об’єкти ігноруються з міркувань безпеки, якщо allow_objects не має значення true.

Ви можете перетворити рядок JSON назад на нативне значення так:

func decode_data(рядок, allow_objects = false):
    return JSON.to_native(JSON.parse_string(string), allow_objects)