123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- :github_url: hide
- .. DO NOT EDIT THIS FILE!!!
- .. Generated automatically from Godot engine sources.
- .. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
- .. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/JSON.xml.
- .. _class_JSON:
- JSON
- ====
- **Inherits:** :ref:`Resource<class_Resource>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
- Helper class for creating and parsing JSON data.
- .. rst-class:: classref-introduction-group
- Description
- -----------
- The **JSON** enables all data types to be converted to and from a JSON string. This useful for serializing data to save to a file or send over the network.
- \ :ref:`stringify<class_JSON_method_stringify>` is used to convert any data type into a JSON string.
- \ :ref:`parse<class_JSON_method_parse>` is used to convert any existing JSON data into a :ref:`Variant<class_Variant>` that can be used within Godot. If successfully parsed, use :ref:`data<class_JSON_property_data>` to retrieve the :ref:`Variant<class_Variant>`, and use ``typeof`` to check if the Variant's type is what you expect. JSON Objects are converted into a :ref:`Dictionary<class_Dictionary>`, but JSON data can be used to store :ref:`Array<class_Array>`\ s, numbers, :ref:`String<class_String>`\ s and even just a boolean.
- \ **Example**\
- ::
- var data_to_send = ["a", "b", "c"]
- var json_string = JSON.stringify(data_to_send)
- # Save data
- # ...
- # Retrieve data
- 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 array
- else:
- print("Unexpected data")
- else:
- print("JSON Parse Error: ", json.get_error_message(), " in ", json_string, " at line ", json.get_error_line())
- Alternatively, you can parse string using the static :ref:`parse_string<class_JSON_method_parse_string>` method, but it doesn't allow to handle errors.
- ::
- var data = JSON.parse_string(json_string) # Returns null if parsing failed.
- \ **Note:** Both parse methods do not fully comply with the JSON specification:
- - Trailing commas in arrays or objects are ignored, instead of causing a parser error.
- - New line and tab characters are accepted in string literals, and are treated like their corresponding escape sequences ``\n`` and ``\t``.
- - Numbers are parsed using :ref:`String.to_float<class_String_method_to_float>` which is generally more lax than the JSON specification.
- - Certain errors, such as invalid Unicode sequences, do not cause a parser error. Instead, the string is cleansed and an error is logged to the console.
- .. rst-class:: classref-reftable-group
- Properties
- ----------
- .. table::
- :widths: auto
- +-------------------------------+---------------------------------------+----------+
- | :ref:`Variant<class_Variant>` | :ref:`data<class_JSON_property_data>` | ``null`` |
- +-------------------------------+---------------------------------------+----------+
- .. rst-class:: classref-reftable-group
- Methods
- -------
- .. table::
- :widths: auto
- +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`int<class_int>` | :ref:`get_error_line<class_JSON_method_get_error_line>` **(** **)** |const| |
- +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`String<class_String>` | :ref:`get_error_message<class_JSON_method_get_error_message>` **(** **)** |const| |
- +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`String<class_String>` | :ref:`get_parsed_text<class_JSON_method_get_parsed_text>` **(** **)** |const| |
- +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Error<enum_@GlobalScope_Error>` | :ref:`parse<class_JSON_method_parse>` **(** :ref:`String<class_String>` json_text, :ref:`bool<class_bool>` keep_text=false **)** |
- +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Variant<class_Variant>` | :ref:`parse_string<class_JSON_method_parse_string>` **(** :ref:`String<class_String>` json_string **)** |static| |
- +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`String<class_String>` | :ref:`stringify<class_JSON_method_stringify>` **(** :ref:`Variant<class_Variant>` data, :ref:`String<class_String>` indent="", :ref:`bool<class_bool>` sort_keys=true, :ref:`bool<class_bool>` full_precision=false **)** |static| |
- +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- .. rst-class:: classref-section-separator
- ----
- .. rst-class:: classref-descriptions-group
- Property Descriptions
- ---------------------
- .. _class_JSON_property_data:
- .. rst-class:: classref-property
- :ref:`Variant<class_Variant>` **data** = ``null``
- .. rst-class:: classref-property-setget
- - void **set_data** **(** :ref:`Variant<class_Variant>` value **)**
- - :ref:`Variant<class_Variant>` **get_data** **(** **)**
- Contains the parsed JSON data in :ref:`Variant<class_Variant>` form.
- .. rst-class:: classref-section-separator
- ----
- .. rst-class:: classref-descriptions-group
- Method Descriptions
- -------------------
- .. _class_JSON_method_get_error_line:
- .. rst-class:: classref-method
- :ref:`int<class_int>` **get_error_line** **(** **)** |const|
- Returns ``0`` if the last call to :ref:`parse<class_JSON_method_parse>` was successful, or the line number where the parse failed.
- .. rst-class:: classref-item-separator
- ----
- .. _class_JSON_method_get_error_message:
- .. rst-class:: classref-method
- :ref:`String<class_String>` **get_error_message** **(** **)** |const|
- Returns an empty string if the last call to :ref:`parse<class_JSON_method_parse>` was successful, or the error message if it failed.
- .. rst-class:: classref-item-separator
- ----
- .. _class_JSON_method_get_parsed_text:
- .. rst-class:: classref-method
- :ref:`String<class_String>` **get_parsed_text** **(** **)** |const|
- Return the text parsed by :ref:`parse<class_JSON_method_parse>` as long as the function is instructed to keep it.
- .. rst-class:: classref-item-separator
- ----
- .. _class_JSON_method_parse:
- .. rst-class:: classref-method
- :ref:`Error<enum_@GlobalScope_Error>` **parse** **(** :ref:`String<class_String>` json_text, :ref:`bool<class_bool>` keep_text=false **)**
- Attempts to parse the ``json_text`` provided.
- Returns an :ref:`Error<enum_@GlobalScope_Error>`. If the parse was successful, it returns :ref:`@GlobalScope.OK<class_@GlobalScope_constant_OK>` and the result can be retrieved using :ref:`data<class_JSON_property_data>`. If unsuccessful, use :ref:`get_error_line<class_JSON_method_get_error_line>` and :ref:`get_error_message<class_JSON_method_get_error_message>` for identifying the source of the failure.
- Non-static variant of :ref:`parse_string<class_JSON_method_parse_string>`, if you want custom error handling.
- The optional ``keep_text`` argument instructs the parser to keep a copy of the original text. This text can be obtained later by using the :ref:`get_parsed_text<class_JSON_method_get_parsed_text>` function and is used when saving the resource (instead of generating new text from :ref:`data<class_JSON_property_data>`).
- .. rst-class:: classref-item-separator
- ----
- .. _class_JSON_method_parse_string:
- .. rst-class:: classref-method
- :ref:`Variant<class_Variant>` **parse_string** **(** :ref:`String<class_String>` json_string **)** |static|
- Attempts to parse the ``json_string`` provided and returns the parsed data. Returns ``null`` if parse failed.
- .. rst-class:: classref-item-separator
- ----
- .. _class_JSON_method_stringify:
- .. rst-class:: classref-method
- :ref:`String<class_String>` **stringify** **(** :ref:`Variant<class_Variant>` data, :ref:`String<class_String>` indent="", :ref:`bool<class_bool>` sort_keys=true, :ref:`bool<class_bool>` full_precision=false **)** |static|
- Converts a :ref:`Variant<class_Variant>` var to JSON text and returns the result. Useful for serializing data to store or send over the network.
- \ **Note:** The JSON specification does not define integer or float types, but only a *number* type. Therefore, converting a Variant to JSON text will convert all numerical values to :ref:`float<class_float>` types.
- \ **Note:** If ``full_precision`` is ``true``, when stringifying floats, the unreliable digits are stringified in addition to the reliable digits to guarantee exact decoding.
- The ``indent`` parameter controls if and how something is indented, the string used for this parameter will be used where there should be an indent in the output, even spaces like ``" "`` will work. ``\t`` and ``\n`` can also be used for a tab indent, or to make a newline for each indent respectively.
- \ **Example output:**\
- ::
- ## 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"
- ......}
- ...]
- }
- .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
- .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
- .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
- .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
- .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
- .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`
- .. |bitfield| replace:: :abbr:`BitField (This value is an integer composed as a bitmask of the following flags.)`
|