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.
Checking the stable version of the documentation...
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 |
|
Методи
Variant |
from_native(variant: Variant, full_objects: bool = false) static |
get_error_line() const |
|
String |
get_error_message() const |
String |
get_parsed_text() const |
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))
Повертає 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)