Improve JSON-related documentation

This closes https://github.com/godotengine/godot-docs/issues/3848.

(cherry picked from commit 930e10ffff)
This commit is contained in:
Hugo Locurcio 2020-07-31 09:53:04 +02:00 committed by Rémi Verschelde
parent 3869b82bc1
commit fc7451204e
3 changed files with 22 additions and 16 deletions

View File

@ -15,7 +15,7 @@
<argument index="0" name="json" type="String"> <argument index="0" name="json" type="String">
</argument> </argument>
<description> <description>
Parses a JSON encoded string and returns a [JSONParseResult] containing the result. Parses a JSON-encoded string and returns a [JSONParseResult] containing the result.
</description> </description>
</method> </method>
<method name="print"> <method name="print">
@ -29,6 +29,7 @@
</argument> </argument>
<description> <description>
Converts a [Variant] var to JSON text and returns the result. Useful for serializing data to store or send over the network. Converts a [Variant] var to JSON text and returns the result. Useful for serializing data to store or send over the network.
[b]Note:[/b] The JSON specification does not define integer or float types, but only a [i]number[/i] type. Therefore, converting a Variant to JSON text will convert all numerical values to [float] types.
</description> </description>
</method> </method>
</methods> </methods>

View File

@ -15,21 +15,21 @@
The error type if the JSON source was not successfully parsed. See the [enum Error] constants. The error type if the JSON source was not successfully parsed. See the [enum Error] constants.
</member> </member>
<member name="error_line" type="int" setter="set_error_line" getter="get_error_line" default="-1"> <member name="error_line" type="int" setter="set_error_line" getter="get_error_line" default="-1">
The line number where the error occurred if JSON source was not successfully parsed. The line number where the error occurred if the JSON source was not successfully parsed.
</member> </member>
<member name="error_string" type="String" setter="set_error_string" getter="get_error_string" default="&quot;&quot;"> <member name="error_string" type="String" setter="set_error_string" getter="get_error_string" default="&quot;&quot;">
The error message if JSON source was not successfully parsed. See the [enum Error] constants. The error message if the JSON source was not successfully parsed. See the [enum Error] constants.
</member> </member>
<member name="result" type="Variant" setter="set_result" getter="get_result"> <member name="result" type="Variant" setter="set_result" getter="get_result">
A [Variant] containing the parsed JSON. Use [method @GDScript.typeof] or the [code]is[/code] keyword to check if it is what you expect. For example, if the JSON source starts with curly braces ([code]{}[/code]), a [Dictionary] will be returned. If the JSON source starts with braces ([code][][/code]), an [Array] will be returned. A [Variant] containing the parsed JSON. Use [method @GDScript.typeof] or the [code]is[/code] keyword to check if it is what you expect. For example, if the JSON source starts with curly braces ([code]{}[/code]), a [Dictionary] will be returned. If the JSON source starts with brackets ([code][][/code]), an [Array] will be returned.
[b]Note:[/b] The JSON specification does not define integer or float types, but only a number type. Therefore, parsing a JSON text will convert all numerical values to float types. [b]Note:[/b] The JSON specification does not define integer or float types, but only a [i]number[/i] type. Therefore, parsing a JSON text will convert all numerical values to [float] types.
[b]Note:[/b] JSON objects do not preserve key order like Godot dictionaries, thus, you should not rely on keys being in a certain order if a dictionary is constructed from JSON. In contrast, JSON arrays retain the order of their elements: [b]Note:[/b] JSON objects do not preserve key order like Godot dictionaries, thus, you should not rely on keys being in a certain order if a dictionary is constructed from JSON. In contrast, JSON arrays retain the order of their elements:
[codeblock] [codeblock]
var p = JSON.parse('["hello", "world", "!"]') var p = JSON.parse('["hello", "world", "!"]')
if typeof(p.result) == TYPE_ARRAY: if typeof(p.result) == TYPE_ARRAY:
print(p.result[0]) # Prints "hello" print(p.result[0]) # Prints "hello"
else: else:
print("unexpected results") push_error("Unexpected results.")
[/codeblock] [/codeblock]
</member> </member>
</members> </members>

View File

@ -734,16 +734,17 @@
<argument index="0" name="json" type="String"> <argument index="0" name="json" type="String">
</argument> </argument>
<description> <description>
Parse JSON text to a Variant (use [method typeof] to check if it is what you expect). Parse JSON text to a Variant. (Use [method typeof] to check if the Variant's type is what you expect.)
Be aware that the JSON specification does not define integer or float types, but only a number type. Therefore, parsing a JSON text will convert all numerical values to [float] types. [b]Note:[/b] The JSON specification does not define integer or float types, but only a [i]number[/i] type. Therefore, parsing a JSON text will convert all numerical values to [float] types.
Note that JSON objects do not preserve key order like Godot dictionaries, thus you should not rely on keys being in a certain order if a dictionary is constructed from JSON. In contrast, JSON arrays retain the order of their elements: [b]Note:[/b] JSON objects do not preserve key order like Godot dictionaries, thus, you should not rely on keys being in a certain order if a dictionary is constructed from JSON. In contrast, JSON arrays retain the order of their elements:
[codeblock] [codeblock]
p = parse_json('["a", "b", "c"]') var p = JSON.parse('["hello", "world", "!"]')
if typeof(p) == TYPE_ARRAY: if typeof(p.result) == TYPE_ARRAY:
print(p[0]) # Prints a print(p.result[0]) # Prints "hello"
else: else:
print("unexpected results") push_error("Unexpected results.")
[/codeblock] [/codeblock]
See also [JSON] for an alternative way to parse JSON text.
</description> </description>
</method> </method>
<method name="polar2cartesian"> <method name="polar2cartesian">
@ -1216,12 +1217,16 @@
<argument index="0" name="var" type="Variant"> <argument index="0" name="var" type="Variant">
</argument> </argument>
<description> <description>
Converts a Variant [code]var[/code] to JSON text and return the result. Useful for serializing data to store or send over the network. Converts a [Variant] [code]var[/code] to JSON text and return the result. Useful for serializing data to store or send over the network.
[codeblock] [codeblock]
# Both numbers below are integers.
a = { "a": 1, "b": 2 } a = { "a": 1, "b": 2 }
b = to_json(a) b = to_json(a)
print(b) # {"a":1, "b":2} print(b) # {"a":1, "b":2}
# Both numbers above are floats, even if they display without any decimal places.
[/codeblock] [/codeblock]
[b]Note:[/b] The JSON specification does not define integer or float types, but only a [i]number[/i] type. Therefore, converting a [Variant] to JSON text will convert all numerical values to [float] types.
See also [JSON] for an alternative way to convert a [Variant] to JSON text.
</description> </description>
</method> </method>
<method name="type_exists"> <method name="type_exists">
@ -1264,9 +1269,9 @@
j = to_json([1, 2, 3]) j = to_json([1, 2, 3])
v = validate_json(j) v = validate_json(j)
if not v: if not v:
print("valid") print("Valid JSON.")
else: else:
prints("invalid", v) push_error("Invalid JSON: " + v)
[/codeblock] [/codeblock]
</description> </description>
</method> </method>