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, не викликають помилки синтаксичного аналізатора. Натомість рядок очищається, а помилка реєструється на консолі.
Властивості
|
Методи
from_native(variant: Variant, full_objects: bool = false) static |
|
get_error_line() const |
|
get_error_message() const |
|
get_parsed_text() const |
|
parse_string(json_string: String) static |
|
stringify(data: Variant, indent: String = "", sort_keys: bool = true, full_precision: bool = false) static |
|
to_native(json: Variant, allow_objects: bool = false) static |
Описи властивостей
Містить дані парсованих 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 не визначає цілі чи типи з плаваючою точкою, а лише тип число. Таким чином, перетворення Variant на текст JSON перетворить усі числові значення на типи float.
Примітка: Якщо full_precision має значення true, під час утворення рядків з плаваючою точкою ненадійні цифри утворюються в рядки на додаток до надійних цифр, щоб гарантувати точне декодування.
Параметр indent контролює, чи мається відступ і як це відбувається; його вміст буде використано там, де має бути відступ у виведених даних. Навіть такі пробіли, як " ", будуть працювати. \t і \n також можна використовувати для відступу табуляції або для створення нового рядка для кожного відступу відповідно.
Приклад результату:
## 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")
{
"ім'я": "мій_словник",
"версія": "1.0.0",
"сутності": [
{
"ім'я": "сутність_0",
"значення": "значення_0"
},
{
"ім'я": "сутність_1",
"value": "value_1"
}
]
}
## JSON.stringify(my_dictionary, "...")
{
..."ім'я": "мій_словник",
..."версія": "1.0.0",
..."сутності": [
......{
........."ім'я": "сутність_0",
........."значення": "значення_0"
......},
......{
........."ім'я": "сутність_1",
........."значення": "значення_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)