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)