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() для проверки того, соответствует ли тип Variant ожидаемому. Объекты 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) # Prints the array.
else:
print("Unexpected data")
else:
print("JSON Parse Error: ", json.get_error_message(), " in ", json_string, " at line ", json.get_error_line())
В качестве альтернативы можно анализировать строки с помощью статического метода parse_string(), но он не обрабатывает ошибки..
var data = JSON.parse_string(json_string) # Возвращает null, если анализ не удался.
Примечание: Оба метода анализа не полностью соответствуют спецификации JSON:
Завершающие запятые в массивах или объектах игнорируются, а не вызывают ошибку синтаксического анализатора.
Символы новой строки и табуляции принимаются в строковых литералах и обрабатываются как соответствующие им escape-последовательности
\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(value, 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. Любые вхождения @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(string, allow_objects = false):
return JSON.to_native(JSON.parse_string(string), allow_objects)