Json decode: PHP: json_decode β Manual
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
json β ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΡΠΈΠΊ ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ JSON β Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ Python 3.11.4
ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄: Lib/json/__init__.py
JSON (ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° JavaScript), ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ
RFC 7159 (ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ RFC 4627 ) ΠΈ
ΠΠΠΠ-404,
ΡΡΠΎ ΠΎΠ±Π»Π΅Π³ΡΠ΅Π½Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ, Π²Π΄ΠΎΡ
Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π»ΠΈΡΠ΅ΡΠ°Π»Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° JavaScript
(Ρ
ΠΎΡΡ ΡΡΠΎ Π½Π΅ ΡΡΡΠΎΠ³ΠΎΠ΅ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ JavaScript 1 ).
ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅
ΠΡΠ΄ΡΡΠ΅ ΠΎΡΡΠΎΡΠΎΠΆΠ½Ρ ΠΏΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ Π΄Π°Π½Π½ΡΡ
JSON ΠΈΠ· Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½ΡΡ
ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ². Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΉ
Π‘ΡΡΠΎΠΊΠ° JSON ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΡΡΡΠΎΠ² Π¦Π ΠΈ ΠΏΠ°ΠΌΡΡΠΈ.
Π Π΅ΡΡΡΡΡ. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌΡΡ
Π΄Π°Π½Π½ΡΡ
.
json
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ API, Π·Π½Π°ΠΊΠΎΠΌΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΌΠ°ΡΡΠ°Π»
ΠΈ ΠΏΠΈΠΊΠ»
.
ΠΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Python:
>>> ΠΈΠΌΠΏΠΎΡΡ json >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) '["foo", {"bar": ["baz", null, 1.0, 2]}]' >>> print(json.dumps("\"foo\bar")) "\"ΡΡ\Π±Π°Ρ" >>> ΠΏΠ΅ΡΠ°ΡΡ (json.dumps ('\ u1234')) "\u1234" >>> ΠΏΠ΅ΡΠ°ΡΡ (json.dumps ('\\')) "\\" >>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)) {"Π°": 0, "Π±": 0, "Π²": 0} >>> ΠΈΠ· io ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ StringIO >>> ΠΈΠΎ = StringIO() >>> json.dump(['API ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ'], io) >>> io.getvalue() '["API ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ"]'
ΠΠΎΠΌΠΏΠ°ΠΊΡΠ½Π°Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ°:
>>> ΠΈΠΌΠΏΠΎΡΡ json >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':')) '[1,2,3,{"4":5,"6":7}]'
ΠΡΠ°ΡΠΈΠ²Π°Ρ ΠΏΠ΅ΡΠ°ΡΡ:
>>> ΠΈΠΌΠΏΠΎΡΡ json >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, ΠΎΡΡΡΡΠΏ=4)) { Β«4Β»: 5, Β«6Β»: 7 }
ΠΠ΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ JSON:
>>> ΠΈΠΌΠΏΠΎΡΡ json >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') ['foo', {'bar': ['baz', None, 1.0, 2]}] >>> json.loads('"\\"foo\\bar"') '"foo\x08ar' >>> ΠΈΠ· io ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ StringIO >>> io = StringIO('["API ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ"]') >>> json.load(io) ['API ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ']
Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² JSON:
>>> ΠΈΠΌΠΏΠΎΡΡ json >>> ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ as_complex(dct): ... Π΅ΡΠ»ΠΈ '__complex__' Π² dct: ... Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ (dct['real'], dct['imag']) ... Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΠΠ ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', ... object_hook=as_complex) (1+2ΠΊ) >>> ΠΈΠΌΠΏΠΎΡΡ Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠ³ΠΎ >>> json.loads('1.1', parse_float=decimal.Decimal) ΠΠ΅ΡΡΡΠΈΡΠ½ΡΠΉ ('1.1')
Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ JSONEncoder
:
>>> ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ json >>> ΠΊΠ»Π°ΡΡ ComplexEncoder(json.JSONEncoder): ... ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Ρ, ΠΎΠ±ΡΠ΅ΠΊΡ): ... Π΅ΡΠ»ΠΈ isinstance (obj, ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ): ... Π²Π΅ΡΠ½ΡΡΡ [obj.real, obj.imag] ... # ΠΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π²ΡΠ·ΠΎΠ²Π΅Ρ TypeError ... Π²Π΅ΡΠ½ΡΡΡ json.JSONEncoder.default(self, obj) ... >>> json.dumps(2 + 1j, cls=ComplexEncoder) '[2.0, 1.0]' >>> ComplexEncoder().encode(2 + 1j) '[2.0, 1.0]' >>> list(ComplexEncoder().iterencode(2 + 1j)) ['[2.0', ', 1.0', ']']
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ json.tool
ΠΈΠ· ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈ ΠΊΡΠ°ΡΠΈΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ°ΡΠΈ:
$ ΡΡ ΠΎ '{"json":"obj"}' | ΠΏΠΈΡΠΎΠ½-ΠΌ json.tool { "json": "ΠΎΠ±ΡΠ΅ΠΊΡ" } $ ΡΡ ΠΎ '{1.2:3.4}' | ΠΏΠΈΡΠΎΠ½-ΠΌ json.tool ΠΠΆΠΈΠ΄Π°Π΅ΡΡΡ ΠΈΠΌΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°, Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π² Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ: ΡΡΡΠΎΠΊΠ° 1 ΡΡΠΎΠ»Π±Π΅Ρ 2 (char 1)
ΠΠΎΠ΄ΡΠΎΠ±Π½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΠΌ. Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅
JSON ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ YAML 1.2. JSON, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ
Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ΅ΠΏΠ°ΡΠ°ΡΠΎΡΡ
value) ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ YAML 1.0 ΠΈ 1.1. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ YAML.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅
ΠΠΎΠ΄Π΅ΡΡ ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΡ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²Π²ΠΎΠ΄Π° ΠΈ Π²ΡΠ²ΠΎΠ΄Π°,
ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠΎΡΡΠ΄ΠΎΠΊ ΡΠ΅ΡΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Π½Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Ρ.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
- json.dump( obj , fp , * , skipkeys=False , sure_ascii=True , check_circular=True , allow_nan=ΠΡΡΠΈΠ½Π° , cls=ΠΠ΅Ρ , ΠΎΡΡΡΡΠΏ=ΠΠ΅Ρ , ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΠΈ=ΠΠ΅Ρ , default=ΠΠ΅Ρ , sort_keys=ΠΠΎΠΆΡ 90 063, **ΠΊΠ²Ρ )
Π‘Π΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ obj Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠΎΠΊΠ° Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON Π² fp (ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°
.
write()
ΡΠ°ΠΉΠ»ΠΎΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ.ΠΡΠ»ΠΈ skipkeys ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ:
False
), ΡΠΎ ΠΊΠ»ΡΡΠΈ dict, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅
Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (str
,int
,float
,bool
,
None
) Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΏΡΡΠ΅Π½ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²ΡΠ·ΡΠ²Π°ΡΡTypeError
.ΠΠΎΠ΄ΡΠ»Ρ
json
Π²ΡΠ΅Π³Π΄Π° ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡstr
, Π° Π½Π΅
Π±Π°ΠΉΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ,fp.write()
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡstr
Π²Ρ ΠΎΠ΄.ΠΡΠ»ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ_ascii ΠΈΡΡΠΈΠ½Π½ΠΎ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ), Π²ΡΠ²ΠΎΠ΄ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ
ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π½Π΅-ASCII-ΡΠΈΠΌΠ²ΠΎΠ»Ρ. ΠΡΠ»ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ_ascii Π΅ΡΡΡ
false, ΡΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π±ΡΠ΄ΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΠΊΠ°ΠΊ Π΅ΡΡΡ.ΠΡΠ»ΠΈ check_circular ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ false (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ:
True
), ΡΠΎ ΠΊΡΡΠ³ΠΎΠ²ΠΎΠΉ
ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΡΠ»ΠΎΠΊ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΏΡΡΠ΅Π½Π°, Π° ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡΡΠ»ΠΊΠ°
ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅RecursionError
(ΠΈΠ»ΠΈ Ρ ΡΠΆΠ΅).ΠΡΠ»ΠΈ allow_nan ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ false (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ:
True
), ΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ
ValueError
Π΄Π»Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²Π½Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°float
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ (nan
,
inf
,-inf
) Π² ΡΡΡΠΎΠ³ΠΎΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ JSON.
ΠΡΠ»ΠΈ allow_nan ΠΈΡΡΠΈΠ½Π½ΠΎ, ΠΈΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΡ Π² JavaScript (NaN
,
Infinity
,-Infinity
).ΠΡΠ»ΠΈ ΠΎΡΡΡΡΠΏ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠ΅Π»ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΠΎΠΉ, ΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π° JSON ΠΈ
ΡΠ»Π΅Π½Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π±ΡΠ΄ΡΡ ΠΊΡΠ°ΡΠΈΠ²ΠΎ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½Ρ Ρ ΡΡΠΈΠΌ ΡΡΠΎΠ²Π½Π΅ΠΌ ΠΎΡΡΡΡΠΏΠ°. Π£ΡΠΎΠ²Π΅Π½Ρ ΠΎΡΡΡΡΠΏΠ°
0, ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΠ»ΠΈ""
Π±ΡΠ΄Π΅Ρ Π²ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½ΠΎΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ.ΠΠ΅Ρ
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ)
Π²ΡΠ±ΠΈΡΠ°Π΅Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡΡΡΡΠΏΠ°
ΠΎΡΡΡΡΠΏΠΎΠ² ΡΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² Π½Π° ΡΡΠΎΠ²Π΅Π½Ρ. ΠΡΠ»ΠΈ ΠΎΡΡΡΡΠΏ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠΎΠΊΠΎΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,"\t"
),
ΡΡΠ° ΡΡΡΠΎΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΡΡΡΡΠΏΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ.ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.2: Π Π°Π·ΡΠ΅ΡΠ΅Π½Ρ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ Ρ ΠΎΡΡΡΡΠΏΠΎΠΌ Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅Π»ΡΠΌ ΡΠΈΡΠ»Π°ΠΌ.
ΠΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ
(item_separator, key_separator)
ΠΊΠΎΡΡΠ΅ΠΆ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ(', ', ':')
, Π΅ΡΠ»ΠΈ ΠΎΡΡΡΡΠΏ ΡΠ°Π²Π΅Π½ΠΠ΅Ρ
ΠΈ
(',', ':')
ΠΈΠ½Π°ΡΠ΅. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ JSON,
Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΊΠ°Π·Π°ΡΡ(',', ':')
Π΄Π»Ρ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ².ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.4: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
(',', ': ')
ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΎΡΡΡΡΠΏ Π½Π΅ ΡΠ°Π²Π΅Π½ΠΠ΅Ρ
.ΠΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅
ΠΈΠ½Π°ΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½. ΠΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ JSON
ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π½ΠΈΠΌΠΈΡΠ΅ΠΡΠΈΠ±ΠΊΠ° ΡΠΈΠΏΠ°
. ΠΡΠ»ΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ,TypeError
ΠΠΎΠ΄Π½ΡΠ»ΡΡ.ΠΡΠ»ΠΈ sort_keys ΡΠ°Π²Π½ΠΎ true (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ:
False
), ΡΠΎ Π²ΡΠ²ΠΎΠ΄
ΡΠ»ΠΎΠ²Π°ΡΠΈ Π±ΡΠ΄ΡΡ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΠΎ ΠΊΠ»ΡΡΡ.Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ
JSONEncoder
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ
default()
Π΄Π»Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ²), ΡΠΊΠ°ΠΆΠΈΡΠ΅ Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°
ΠΊΠ»Π°ΡΡ ΠΊΠ²Π°ΡΠ³; Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡJSONEncoder
.ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.6: ΠΡΠ΅ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ»ΠΎΠ²Π°.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ
pickle
ΠΈmarshal
, JSON Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ΅ΠΉΠΌΠΎΠ²ΡΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌ,
ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠΏΡΡΠΊΠ° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΠΌΠΈ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ
dump()
Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΎΠ³ΠΎ ΠΆΠ΅ fp ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° JSON.
- json.dumps( obj , * , skipkeys=False , sure_ascii=True , check_circular=True , allow_nan=True 9006 3, ΠΊΠ»Ρ=ΠΠ΅Ρ , ΠΎΡΡΡΡΠΏ=Π½Π΅Ρ , ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΠΈ=Π½Π΅Ρ , ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ=Π½Π΅Ρ , sort_keys=Π»ΠΎΠΆΡ , **kw )
Π‘Π΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ obj Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON
str
Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ
ΡΡΠΎΠ».ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠΌΡΡΠ», ΡΡΠΎ ΠΈ Π²
Π΄Π°ΠΌΠΏ()
.ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅
ΠΠ»ΡΡΠΈ Π² ΠΏΠ°ΡΠ°Ρ ΠΊΠ»ΡΡ/Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ JSON Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ
str
. ΠΠΎΠ³Π΄Π°
ΡΠ»ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΡΡΡ Π² JSON, Π²ΡΠ΅ ΠΊΠ»ΡΡΠΈ ΡΠ»ΠΎΠ²Π°ΡΡ
ΠΏΡΠΈΠ½ΡΠΆΠ΄Π°ΡΡ ΠΊ ΡΡΡΡΠ½Π°ΠΌ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ
Π² JSON, Π° Π·Π°ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΡΠ»ΠΎΠ²Π°ΡΡ, ΡΠ»ΠΎΠ²Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ
ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ. ΡΠΎ Π΅ΡΡΡload(dumps(x)) != x
, Π΅ΡΠ»ΠΈ x ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΡΡΡΠΎΠΊΠΎΠ²ΡΠΉ
ΠΊΠ»ΡΡΠΈ.
- json.load( fp , * , cls=ΠΠ΅Ρ , object_hook=ΠΠ΅Ρ , parse_float=ΠΠ΅Ρ , parse_int=ΠΠ΅Ρ , 9 0062 parse_constant=ΠΠ΅Ρ , object_pairs_hook=ΠΠ΅Ρ , * *ΠΊΠ²Ρ )
ΠΠ΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ fp (ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ»
.read()
ΠΈΠ»ΠΈ
Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ JSON) Π² ΠΎΠ±ΡΠ΅ΠΊΡ Python, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ
ΡΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ.object_hook β Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ
Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΡΡΡ Π»ΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ Π»ΠΈΡΠ΅ΡΠ°Π» (dict
).ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
object_hook Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΠΌΠ΅ΡΡΠΎdict
. ΠΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, JSON-RPC
ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° ΠΊΠ»Π°ΡΡΠ°).object_pairs_hook β Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ
ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π»ΡΠ±ΠΎΠ³ΠΎ Π»ΠΈΡΠ΅ΡΠ°Π»Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΏΠ°Ρ.
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ object_pairs_hook Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ
Π΄ΠΈΠΊΡ
. ΠΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΠΎΠ².
ΠΡΠ»ΠΈ object_hook ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½, object_pairs_hook ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ.ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.1: ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ββΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° object_pairs_hook .
parse_float , Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ, Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠΎ ΡΡΡΠΎΠΊΠΎΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ JSON
float Π΄Π»Ρ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎfloat(num_str)
..
ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΏΠ°ΡΡΠ΅ΡΠ° Π΄Π»Ρ JSON Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ.
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,Π΄Π΅ΡΡΡΠΈΡΠ½ΡΠΉ. ΠΠ΅ΡΡΡΠΈΡΠ½ΡΠΉ
).parse_int , Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ, Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠΎ ΡΡΡΠΎΠΊΠΎΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ JSON int
Π±ΡΡΡ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΠΌ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎint(num_str)
. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΏΠ°ΡΡΠ΅ΡΠ° Π΄Π»Ρ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π» JSON
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ
).ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.11: ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ parse_int ΠΈΠ·
int()
ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π΄Π»ΠΈΠ½Ρ
ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½Π°Ρ ΡΡΡΠΎΠΊΠ° ΡΠ΅ΡΠ΅Π· ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΡΡΡΠΎΠΊΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΎΡΠΊΠ°Π·Π°
ΡΠ΅ΡΠ²ΠΈΡΠ½ΡΡ Π°ΡΠ°ΠΊ.parse_constant , Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ, Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΡΡΡΠΎΠΊΠΈ:'-ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΡ'
,'ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΡ'
,'NaN'
.
ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΡΠΈΡΠ»Π° JSON
Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ.ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.1: parse_constant Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ Β«nullΒ», Β«trueΒ», Β«falseΒ».
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ
JSONDecoder
, ΡΠΊΠ°ΠΆΠΈΡΠ΅ Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡcls
ΠΊΠ²Π°ΡΠ³; ΠΈΠ½Π°ΡΠ΅ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ JSONDecoder
. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°
Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΠΊΠ»Π°ΡΡΠ°.ΠΡΠ»ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠΌ JSON,
JSONDecodeError
Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ΠΎ.ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.6: ΠΡΠ΅ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ»ΠΎΠ²Π°.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.6: fp ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ. ΠΡ ΠΎΠ΄Π½Π°Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ
UTF-8, UTF-16 ΠΈΠ»ΠΈ UTF-32.
- json.loads( s , * , cls=ΠΠ΅Ρ , object_hook=ΠΠ΅Ρ , parse_float=ΠΠ΅Ρ , parse_int=ΠΠ΅Ρ , ΡΠ°Π·Π±ΠΎΡ _constant=ΠΠ΅Ρ , object_pairs_hook=ΠΠ΅Ρ , **kw )
ΠΠ΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ s (a
str
,Π±Π°ΠΉΡ
ΠΈΠ»ΠΈbytearray
ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ JSON) Π² ΠΎΠ±ΡΠ΅ΠΊΡ Python, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠΎΡ
ΡΠ°Π±Π»ΠΈΡΠ° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ.ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎ ΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎ ΠΈ Π²
Π·Π°Π³ΡΡΠ·ΠΊΠ°()
.ΠΡΠ»ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠΌ JSON,
JSONDecodeError
Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ΠΎ.ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.6: s ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ
bytes
ΠΈΠ»ΠΈbytearray
.
Π²Ρ ΠΎΠ΄Π½Π°Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ UTF-8, UTF-16 ΠΈΠ»ΠΈ UTF-32.ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.9: ΠΡΠ³ΡΠΌΠ΅Π½Ρ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° , ΠΊΠΎΠ΄ΠΈΡΡΡΡΠΈΠΉ , Π±ΡΠ» ΡΠ΄Π°Π»Π΅Π½.
ΠΠΎΠ΄ΠΈΡΠΎΠ²ΡΠΈΠΊΠΈ ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΡ
- ΠΊΠ»Π°ΡΡ json.JSONDecoder( * , object_hook = ΠΠ΅Ρ , parse_float = ΠΠ΅Ρ , parse_int = ΠΠ΅Ρ , parse_constant = ΠΠ΅Ρ , strict=ΠΡΡΠΈΠ½Π° , object_pairs_hook=ΠΠ΅Ρ )
ΠΡΠΎΡΡΠΎΠΉ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ JSON.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ:
JSON
ΠΠΈΡΠΎΠ½
ΠΎΠ±ΡΠ΅ΠΊΡ
Π΄ΠΈΠΊΡ
ΠΌΠ°ΡΡΠΈΠ²
ΡΠΏΠΈΡΠΎΠΊ
ΡΡΡΠΎΠΊΠ°
ΡΠ»
Π½ΠΎΠΌΠ΅Ρ (Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ)
Π²Π½ΡΡΡ.
Π½ΠΎΠΌΠ΅Ρ (ΡΠ΅Π°Π»ΡΠ½ΡΠΉ)
ΠΏΠΎΠΏΠ»Π°Π²ΠΎΠΊ
ΠΏΡΠ°Π²Π΄Π°
ΠΡΠ°Π²Π΄Π°
Π»ΠΎΠΆΠ½ΡΠΉ
ΠΠΎΠΆΡ
Π½ΠΎΠ»Ρ
ΠΠ΅Ρ
ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ
NaN
,Infinity
ΠΈ-Infinity
ΠΊΠ°ΠΊ ΠΈΡ
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ
, ΡΡΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ JSON.object_hook , Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ, Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ JSON
ΠΎΠ±ΡΠ΅ΠΊΡ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΡΡΡ, ΠΈ Π΅Π³ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ
Π΄ΠΈΠΊΡ
. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ
ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ ΠΊΠ»Π°ΡΡΠ° JSON-RPC).object_pairs_hook , Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ, Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ
ΠΠ±ΡΠ΅ΠΊΡ JSON Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΏΠ°Ρ. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
object_pairs_hook Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΠΌΠ΅ΡΡΠΎdict
.ΠΡΠΎΡ
ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΠΎΠ². ΠΡΠ»ΠΈ object_hook ΡΠ°ΠΊΠΆΠ΅
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ, object_pairs_hook ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ.ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.1: ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ββΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° object_pairs_hook .
parse_float , Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ, Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠΎ ΡΡΡΠΎΠΊΠΎΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ JSON
float Π΄Π»Ρ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎfloat(num_str)
.
ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΏΠ°ΡΡΠ΅ΡΠ° Π΄Π»Ρ JSON Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ.
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,Π΄Π΅ΡΡΡΠΈΡΠ½ΡΠΉ. ΠΠ΅ΡΡΡΠΈΡΠ½ΡΠΉ
).parse_int , Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ, Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠΎ ΡΡΡΠΎΠΊΠΎΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ JSON int
Π±ΡΡΡ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΠΌ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎΡΠ΅Π»ΠΎΠ΅(ΡΠΈΡΠ»ΠΎ_ΡΡΡ)
. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΏΠ°ΡΡΠ΅ΡΠ° Π΄Π»Ρ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π» JSON
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ
).parse_constant , Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ, Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΡΡΡΠΎΠΊΠΈ:'-ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΡ'
,'ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΡ'
,'NaN'
.
ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΡΠΈΡΠ»Π° JSON
Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ.ΠΡΠ»ΠΈ strict ΡΠ°Π²Π½ΠΎ false (
True
ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ), ΡΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ
Π±ΡΠ΄ΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ Π²Π½ΡΡΡΠΈ ΡΡΡΠΎΠΊ. Π£ΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² ΡΡΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅
ΡΠ΅, Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΊΠΎΠ΄Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 0β31, Π²ΠΊΠ»ΡΡΠ°Ρ'\t'
(Π²ΠΊΠ»Π°Π΄ΠΊΠ°),
'\n'
,'\r'
ΠΈ'\0'
.ΠΡΠ»ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠΌ JSON,
JSONDecodeError
Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ΠΎ.ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.6: ΠΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ»ΠΎΠ²Π°.
- Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ( Ρ )
ΠΠ΅ΡΠ½ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Python s (ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ
str
ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ JSON).JSONDecodeError
Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄Π½ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ JSON Π½Π΅
Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ.
- raw_decode( Ρ )
ΠΠ΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ JSON ΠΈΠ· s (
str
, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΉΡΡ Ρ
Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ JSON) ΠΈ Π²Π΅ΡΠ½ΡΡΡ 2-ΠΊΠΎΡΡΠ΅ΠΆ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Python
ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ Π² s , Π³Π΄Π΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΡΡ.ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° JSON ΠΈΠ· ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ
Π»ΠΈΡΠ½ΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅.
- class json.JSONEncoder( * , skipkeys=False , sure_ascii=True , check_circular=True , allow_nan=True , sort_keys=False , ΠΎΡΡΡΡΠΏ=Π½Π΅Ρ , ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΠΈ= ΠΠ΅Ρ , ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ = ΠΠ΅Ρ )
Π Π°ΡΡΠΈΡΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΡΠΈΠΊ JSON Π΄Π»Ρ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ Python.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈ ΡΠΈΠΏΡ:
ΠΠΈΡΠΎΠ½
JSON
Π΄ΠΈΠΊΡ
ΠΎΠ±ΡΠ΅ΠΊΡ
ΡΠΏΠΈΡΠΎΠΊ, ΠΊΠΎΡΡΠ΅ΠΆ
ΠΌΠ°ΡΡΠΈΠ²
ΡΠ»
ΡΡΡΠΎΠΊΠ°
int, float, int ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΎΡ float ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ
Π½ΠΎΠΌΠ΅Ρ
ΠΡΠ°Π²Π΄Π°
ΠΏΡΠ°Π²Π΄Π°
ΠΠΎΠΆΡ
Π»ΠΎΠΆΠ½ΡΠΉ
ΠΠ΅Ρ
Π½ΠΎΠ»Ρ
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.
4: ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ββΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΊΠ»Π°ΡΡΠΎΠ² Enum, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΎΡ int ΠΈ float.
Π§ΡΠΎΠ±Ρ ΡΠ°ΡΡΠΈΡΠΈΡΡ ΡΡΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ default()
Ρ Π΄ΡΡΠ³ΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ
Π΄Π»ΡΠΈΠ»ΠΈ
, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ°
(ΠΏΠΎΠ΄Π½ΡΡΡΠΡΠΈΠ±ΠΊΠ° ΡΠΈΠΏΠ°
).ΠΡΠ»ΠΈ skipkeys ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ false (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ),
TypeError
Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ΠΎ, ΠΊΠΎΠ³Π΄Π°
ΠΏΠΎΠΏΡΡΠΊΠ° Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»ΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡstr
,int
,float
ΠΈΠ»ΠΈΠΠ΅Ρ
. ΠΡΠ»ΠΈ skipkeys ΠΈΡΡΠΈΠ½Π½ΠΎ, ΡΠ°ΠΊΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ.ΠΡΠ»ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ_ascii ΠΈΡΡΠΈΠ½Π½ΠΎ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ), Π²ΡΠ²ΠΎΠ΄ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ
ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π½Π΅-ASCII-ΡΠΈΠΌΠ²ΠΎΠ»Ρ. ΠΡΠ»ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ_ascii
false, ΡΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π±ΡΠ΄ΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΠΊΠ°ΠΊ Π΅ΡΡΡ.ΠΡΠ»ΠΈ check_circular ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ), ΡΠΎ ΡΠΏΠΈΡΠΊΠΈ, ΡΠ»ΠΎΠ²Π°ΡΠΈ ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅
Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ Π½Π° ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ
ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ (ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅ΡRecursionError
).
Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ.ΠΡΠ»ΠΈ allow_nan ΡΠ°Π²Π½ΠΎ true (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ), ΡΠΎ
NaN
,Infinity
ΠΈ
-Infinity
Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠ²ΠΎΠΉ. ΠΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ JSON
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Π½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎΠΌ ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ Π½Π° JavaScript
ΠΊΠΎΠ΄Π΅ΡΡ ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΡ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ΄Π΅ΡValueError
Π΄Π»Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΡΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠΏΠ»Π°Π²ΠΊΠΈ.ΠΡΠ»ΠΈ sort_keys ΡΠ°Π²Π½ΠΎ true (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ:
False
), ΡΠΎ Π²ΡΠ²ΠΎΠ΄ ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΉ
Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½ ΠΏΠΎ ΠΊΠ»ΡΡΡ; ΡΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΎΠ½Π½ΡΡ ΡΠ΅ΡΡΠΎΠ², ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ
Π‘Π΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ JSON ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΠΈΠ·ΠΎ Π΄Π½Ρ Π² Π΄Π΅Π½Ρ.ΠΡΠ»ΠΈ ΠΎΡΡΡΡΠΏ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠ΅Π»ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΠΎΠΉ, ΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π° JSON ΠΈ
ΡΠ»Π΅Π½Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π±ΡΠ΄ΡΡ ΠΊΡΠ°ΡΠΈΠ²ΠΎ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½Ρ Ρ ΡΡΠΈΠΌ ΡΡΠΎΠ²Π½Π΅ΠΌ ΠΎΡΡΡΡΠΏΠ°. Π£ΡΠΎΠ²Π΅Π½Ρ ΠΎΡΡΡΡΠΏΠ°
ΠΈΠ· 0, ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΠ»ΠΈ""
Π±ΡΠ΄Π΅Ρ Π²ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½ΠΎΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ.ΠΠ΅Ρ
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ)
Π²ΡΠ±ΠΈΡΠ°Π΅Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡΡΡΡΠΏΠ°
ΠΎΡΡΡΡΠΏΠΎΠ² ΡΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² Π½Π° ΡΡΠΎΠ²Π΅Π½Ρ. ΠΡΠ»ΠΈ ΠΎΡΡΡΡΠΏ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠΎΠΊΠΎΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,"\t"
),
ΡΡΠ° ΡΡΡΠΎΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΡΡΡΡΠΏΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ.ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.2: Π Π°Π·ΡΠ΅ΡΠ΅Π½Ρ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ Ρ ΠΎΡΡΡΡΠΏΠΎΠΌ Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅Π»ΡΠΌ ΡΠΈΡΠ»Π°ΠΌ.
ΠΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ
(item_separator, key_separator)
ΠΊΠΎΡΡΠ΅ΠΆ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ(', ', ': ')
, Π΅ΡΠ»ΠΈ ΠΎΡΡΡΡΠΏ ΡΠ°Π²Π΅Π½ΠΠ΅Ρ
ΠΈ
(',', ':')
ΠΈΠ½Π°ΡΠ΅. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ JSON,
Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΊΠ°Π·Π°ΡΡ(',', ':')
Π΄Π»Ρ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ².ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.4: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
(',', ': ')
ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΎΡΡΡΡΠΏ Π½Π΅ ΡΠ°Π²Π΅Π½ΠΠ΅Ρ
.ΠΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅
ΠΈΠ½Π°ΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½. ΠΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ JSON
ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π½ΠΈΠΌΠΈΡΠ΅ΠΡΠΈΠ±ΠΊΠ° ΡΠΈΠΏΠ°
.ΠΡΠ»ΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ,
TypeError
ΠΠΎΠ΄Π½ΡΠ»ΡΡ.ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.6: ΠΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ»ΠΎΠ²Π°.
- ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ( ΠΈΠ»ΠΈ )
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ΅ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π» ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠΉ
ΠΎΠ±ΡΠ΅ΠΊΡ Π΄Π»Ρ o ΠΈΠ»ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ (ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄Π½ΡΡΡ
TypeError
).ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ
ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ()
Π²ΠΎΡ ΡΠ°ΠΊ:ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Ρ, ΠΎ): ΠΏΡΡΠ°ΡΡΡΡ: ΠΈΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΉ = ΠΈΡΠ΅Ρ (ΠΎ) ΠΊΡΠΎΠΌΠ΅ TypeError: ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡΡ Π΅ΡΠ΅: ΡΠΏΠΈΡΠΎΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° (ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌΡΠΉ) # ΠΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π²ΡΠ·ΠΎΠ²Π΅Ρ TypeError Π²Π΅ΡΠ½ΡΡΡ json.JSONEncoder.default (Ρ, ΠΎ)
- ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ( ΠΈΠ»ΠΈ )
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ Python Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON, ΠΈΠ»ΠΈ . ΠΠ»Ρ
ΠΏΡΠΈΠΌΠ΅Ρ:>>> json.JSONEncoder().encode({"foo": ["Π±Π°Ρ", "Π±Π°Π·"]}) '{"foo": ["Π±Π°Ρ", "Π±Π°Π·"]}'
- iterencode ( ΠΈΠ»ΠΈ )
ΠΠ°ΠΊΠΎΠ΄ΠΈΡΡΠΉΡΠ΅ Π΄Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΈΠ»ΠΈ , ΠΈ Π²ΡΠ²Π΅Π΄ΠΈΡΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ
Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ.ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
Π΄Π»Ρ ΡΠ°Π½ΠΊΠ° Π² json.JSONEncoder().iterencode(bigobject): mysocket.write(ΡΠ°Π½ΠΊ)
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
- ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ json.JSONDecodeError ( msg , doc , pos )
ΠΠΎΠ΄ΠΊΠ»Π°ΡΡ
ValueError
ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ:- ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
ΠΠ΅ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.
- Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ
ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ JSON.
- ΠΏΠΎΠ·.
ΠΠ°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° , ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠΈΠ»ΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎ.
- ΠΠΈΠ½Π΅Π½ΠΎ
Π‘ΡΡΠΎΠΊΠ°, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΠΏΠΎΠ·. .
- ΡΡΠΎΠ»Π±Π΅Ρ
Π‘ΡΠΎΠ»Π±Π΅Ρ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ pos .
ΠΠΎΠ²ΠΎΠ΅ Π² Π²Π΅ΡΡΠΈΠΈ 3.5.
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ°ΠΌ ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ
Π€ΠΎΡΠΌΠ°Ρ JSON ΡΠΊΠ°Π·Π°Π½ Π² RFC 7159 ΠΈ
ΠΠΠΠ-404.
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΡΠΎΠ²Π΅Π½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ RFC.
ΠΠ»Ρ ΠΏΡΠΎΡΡΠΎΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΡ JSONEncoder
ΠΈ JSONDecoder
ΠΈ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΊΡΠΎΠΌΠ΅ ΡΠ²Π½ΠΎ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ
, Π½Π΅ ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ.
ΠΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ RFC, ΡΠ΅Π°Π»ΠΈΠ·ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅
ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ JavaScript, Π½ΠΎ Π½Π΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ JSON. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ:
ΠΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ ΠΈ Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ ΠΈ ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ NaN;
ΠΠΎΠ²ΡΠΎΡΡΡΡΠΈΠ΅ΡΡ ΠΈΠΌΠ΅Π½Π° Π²Π½ΡΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠ°ΡΠ° ΠΈΠΌΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ RFC ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ°ΠΌ, ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΌ Ρ RFC, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π²Ρ
ΠΎΠ΄Π½ΡΠ΅ ΡΠ΅ΠΊΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅
RFC-ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ RFC Π²
Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²
RFC ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ JSON Π±ΡΠ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ UTF-8, UTF-16 ΠΈΠ»ΠΈ
UTF-32, ΠΏΡΠΈ ΡΡΠΎΠΌ UTF-8 ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ.
ΠΠ°ΠΊ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ, Ρ
ΠΎΡΡ ΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ RFC, ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ
sure_ascii=True ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π²ΡΠ²ΠΎΠ΄Π°, ΡΡΠΎΠ±Ρ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ
ΡΡΡΠΎΠΊΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ASCII.
ΠΡΠΎΠΌΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° sure_ascii , ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΡΡΠΎΠ³ΠΎ Π²
ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Python ΠΈ
ΡΡΡΠΎΠΊ Unicode
, ΠΈ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π°ΠΏΡΡΠΌΡΡ Π½Π΅ Π°Π΄ΡΠ΅ΡΡΠ΅Ρ
Π²ΠΎΠΏΡΠΎΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
RFC Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΌΠ΅ΡΠΊΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° Π±Π°ΠΉΡΠΎΠ² (BOM) Π² Π½Π°ΡΠ°Π»ΠΎ ΡΠ΅ΠΊΡΡΠ° JSON,
ΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡ Π²ΡΠ²ΠΎΠ΄Ρ.
RFC ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ, Π½ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΡ JSON ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π»ΠΈ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ
BOM Π½Π° ΠΈΡ
Π²Ρ
ΠΎΠ΄Π΅. ΠΠ΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ΠΡΠΈΠ±ΠΊΠ°
ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
RFC ΡΠ²Π½ΠΎ Π½Π΅ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΠΈ JSON, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π±Π°ΠΉΡΠΎΠ².
ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ Unicode (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ΠΏΠ°ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ UTF-16
ΡΡΡΡΠΎΠ³Π°ΡΡ), Π½ΠΎ ΠΎΡΠΌΠ΅ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·Π²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ (ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Π² ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΌ
str
) ΠΊΠΎΠ΄ΠΎΠ²ΡΠ΅ ΡΠΎΡΠΊΠΈ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ
ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ.
ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ ΠΈ ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ NaN
RFC Π½Π΅ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΡ
ΠΈΠ»ΠΈ ΡΠΈΡΠ»ΠΎΠ²ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ NaN.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΡΠΎ, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΡ
,
-Infinity
ΠΈ NaN
, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π»ΠΈΡΠ΅ΡΠ°Π»ΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠΈΡΠ»Π° JSON:
>>> # ΠΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½Ρ JSON >>> json.dumps(Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ('-inf')) '-ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΡ' >>> json.dumps(float('nan')) 'ΠΠ°Π' >>> # Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΏΡΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ >>> json.loads('-ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΡ') -ΠΈΠ½Ρ >>> json.loads('NaN') Π½Π°Π½
Π ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ allow_nan ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ
ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ parse_constant ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ
ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
ΠΠΎΠ²ΡΠΎΡΡΡΡΠΈΠ΅ΡΡ ΠΈΠΌΠ΅Π½Π° Π²Π½ΡΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
RFC ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π° Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ JSON Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ, Π½ΠΎ
Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠ΅ΡΡ ΠΈΠΌΠ΅Π½Π° Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ
JSON. Π
ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ; Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ Π²ΡΠ΅, ΠΊΡΠΎΠΌΠ΅
ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΏΠ°ΡΠ° ΠΈΠΌΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ:
>>> ΡΡΡΠ°Π½Π½ΡΠΉ_json = '{"Ρ ": 1, "Ρ ": 2, "Ρ ": 3}' >>> json.loads(weird_json) {'Ρ ': 3}
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ object_pairs_hook ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ.
ΠΠ½Π°ΡΠ΅Π½ΠΈΡ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π½Π΅ ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, Π½Π΅ ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ
Π‘ΡΠ°ΡΠ°Ρ Π²Π΅ΡΡΠΈΡ JSON, ΡΠΊΠ°Π·Π°Π½Π½Π°Ρ Π² ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅ΠΌ RFC 4627 , ΡΡΠ΅Π±ΠΎΠ²Π°Π»Π°, ΡΡΠΎΠ±Ρ
Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΠ΅ΠΊΡΡΠ° JSON Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ JSON, Π»ΠΈΠ±ΠΎ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ
(Python dict
ΠΈΠ»ΠΈ list
) ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½ΡΠ»Π΅Π²ΡΠΌ JSON,
Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅, ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. RFC 7159 ΡΠ½ΡΠ» ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΠΈ
ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°Π» ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½ΠΈ Π²
ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΡΠΎ, Π΄Π»Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±ΡΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ ΠΊ
ΠΊ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ° JSON ΠΌΠΎΠ³ΡΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π°:
ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΡ ΡΠ΅ΠΊΡΡΠΎΠ² JSON
ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² JSON
Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈ ΡΠΎΡΠ½ΠΎΡΡΡ ΡΠΈΡΠ΅Π» JSON
ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊ JSON
ΠΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π΅ Π½Π°Π»Π°Π³Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΡΠ°ΠΊΠΈΡ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ, ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ
Π‘Π°ΠΌΠΈ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ
Python ΠΈΠ»ΠΈ ΡΠ°ΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Python.
ΠΡΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² JSON ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΠΎ Π»ΡΠ±ΡΡ
ΡΠ°ΠΊΠΈΡ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡ
Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ
ΠΏΠΎΡΡΠ΅Π±Π»ΡΠΉΡΠ΅ ΡΠ²ΠΎΠΉ JSON. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π½ΠΎΠΌΠ΅ΡΠ° JSON ΡΠ°ΡΡΠΎ Π±ΡΠ²Π°ΡΡ
Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² ΡΠΈΡΠ»Π° Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ IEEE 754 ΠΈ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ ΡΡΠΎΠΌΡ
Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠΎΡΠ½ΠΎΡΡΠΈ. ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎ
ΠΏΡΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Python int
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ, ΠΈΠ»ΠΈ
ΠΏΡΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Β«ΡΠΊΠ·ΠΎΡΠΈΡΠ΅ΡΠΊΠΈΡ
Β» ΡΠΈΡΠ»ΠΎΠ²ΡΡ
ΡΠΈΠΏΠΎΠ², ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ
Π΄Π΅ΡΡΡΠΈΡΠ½ΡΠΉ.
. ΠΠ΅ΡΡΡΠΈΡΠ½ΡΠΉ
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄: Lib/json/tool.py
ΠΠΎΠ΄ΡΠ»Ρ json.tool
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ
ΠΈ ΠΊΡΠ°ΡΠΈΠ²ΠΎ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ JSON.
ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ infile
ΠΈ outfile
Π½Π΅
ΡΠΊΠ°Π·Π°Π½ΠΎ, sys.stdin
ΠΈ sys.stdout
Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ:
$ ΡΡ ΠΎ '{"json": "obj"}' | ΠΏΠΈΡΠΎΠ½-ΠΌ json.tool { "json": "ΠΎΠ±ΡΠ΅ΠΊΡ" } $ ΡΡ ΠΎ '{1.2:3.4}' | ΠΏΠΈΡΠΎΠ½-ΠΌ json.tool ΠΠΆΠΈΠ΄Π°Π΅ΡΡΡ ΠΈΠΌΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°, Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π² Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ: ΡΡΡΠΎΠΊΠ° 1 ΡΡΠΎΠ»Π±Π΅Ρ 2 (char 1)
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.5: Π²ΡΠ²ΠΎΠ΄ ΡΠ΅ΠΏΠ΅ΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΡΡΠΎ ΠΈ Π²Π²ΠΎΠ΄. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
--sort-keys
ΠΎΠΏΡΠΈΡ Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΉ
Π² Π°Π»ΡΠ°Π²ΠΈΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΏΠΎ ΠΊΠ»ΡΡΡ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
- ΠΏΡΠΎΡΠΈΠ»Ρ
Π€Π°ΠΉΠ» JSON Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈΠ»ΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ°ΡΠΈ:
$ python -m json.tool mp_films.
json [ { "title": "Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΊΠΎΠ΅-ΡΡΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π΄ΡΡΠ³ΠΎΠ΅", "Π³ΠΎΠ΄": 1971 }, { "title": "ΠΠΎΠ½ΡΠΈ ΠΠ°ΠΉΡΠΎΠ½ ΠΈ Π‘Π²ΡΡΠΎΠΉ ΠΡΠ°Π°Π»Ρ", "Π³ΠΎΠ΄": 1975 } ]
ΠΡΠ»ΠΈ infile Π½Π΅ ΡΠΊΠ°Π·Π°Π½, ΡΠΈΡΠ°ΡΡ ΠΈΠ·
sys.stdin
.
- Π°ΡΡΡΠ°ΠΉΠ»
ΠΠ°ΠΏΠΈΡΠ°ΡΡ Π²ΡΠ²ΠΎΠ΄ infile Π² Π΄Π°Π½Π½ΡΠΉ outfile . Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΡΡΠΎ
Π½Π°sys.stdout
.
- βsort-ΠΊΠ»ΡΡΠΈ
Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π²ΡΠ²ΠΎΠ΄Π° ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΉ Π² Π°Π»ΡΠ°Π²ΠΈΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΏΠΎ ΠΊΠ»ΡΡΡ.
ΠΠΎΠ²ΠΎΠ΅ Π² Π²Π΅ΡΡΠΈΠΈ 3.5.
- βno-ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ-ascii
ΠΡΠΊΠ»ΡΡΠΈΡΡ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΎΡΠ»ΠΈΡΠ½ΡΡ ΠΎΡ ASCII, ΡΠΌ.
json.dumps()
Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.ΠΠΎΠ²ΠΎΠ΅ Π² Π²Π΅ΡΡΠΈΠΈ 3.9.
- βjson-Π»ΠΈΠ½ΠΈΠΈ
ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΡΡΠΎΠΊΡ Π²Π²ΠΎΠ΄Π° ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ JSON.
ΠΠΎΠ²ΠΎΠ΅ Π² Π²Π΅ΡΡΠΈΠΈ 3.8.
- βindent, βtab, βno-indent, βcompact
ΠΠ·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ.
ΠΠΎΠ²ΠΎΠ΅ Π² Π²Π΅ΡΡΠΈΠΈ 3.9.
- -Ρ, βhelp
ΠΠΎΠΊΠ°Π·Π°ΡΡ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
Π‘Π½ΠΎΡΠΊΠΈ
- 1
ΠΠ°ΠΊ ΠΎΡΠΌΠ΅ΡΠ΅Π½ΠΎ Π² ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ Π΄Π»Ρ RFC 7159,
JSON Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡΠΊΠ² U+2028 (LINE SEPARATOR) ΠΈ
U+2029(PARAGRAPH SEPARATOR) ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΡΡΡΠΎΠΊΠ°Ρ , ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ JavaScript
(Π½Π°ΡΠΈΠ½Π°Ρ Ρ ECMAScript Edition 5.1) Π½Π΅Ρ.
β ΠΠ°ΡΠ°Π»ΠΎ Elm
Π ΡΠ°Π·Π΄Π΅Π»Π΅ Β«ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ GETΒ» ΠΌΡ ΡΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠΎΡΡΡΡ ΡΡΡΠΎΠΊΡ Ρ HTTP-ΡΠ΅ΡΠ²Π΅ΡΠ°. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΡΡΠΎ ΡΠ΅ΡΠ²Π΅ΡΡ Π±ΡΠ΄ΡΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON. Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΡΠΎΡΠΌΠ°Ρ ΠΎΡΠ²Π΅ΡΠ° Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠΎ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ Π½Π° JSON ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Elm Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ JSON Π² Π·Π½Π°ΡΠ΅Π½ΠΈΡ Elm.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° JSON
ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ HTTP-ΡΠ΅ΡΠ²Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ JSON. ΠΡΠ΅, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΡΠΎ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π°ΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠ°ΠΊ JSON Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
.
ΠΠΎ Π΅ΡΡΡ ΡΠΏΠΎΡΠΎΠ± Π»ΡΡΡΠ΅. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅ΡΠ²Π΅Ρ, Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ JSON Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠ°ΠΉΠ»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠ°ΠΊΠ΅Ρ NPM Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ json-server. ΠΠ΄ΠΈΡΠ΅ Π²ΠΏΠ΅ΡΠ΅Π΄ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π΅Π³ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ -g
, ΡΡΠΎΠ±Ρ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΈΠ· Π»ΡΠ±ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅.
$ npm install json-server -g
Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ old-school.json
Π²Π½ΡΡΡΠΈ begin-elm/server
.
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ JSON Π² ΡΠ°ΠΉΠ» old-school.json
.
{ "ΠΏΡΠΎΠ·Π²ΠΈΡΠ°": ["ΠΡΠ΅ΡΡΠ½ΡΠΉ ΠΎΡΠ΅Ρ", "Π’Π°Π½ΠΊ", "Π¨Π°ΠΏΠΎΡΠΊΠ°", "Π‘ΡΡ"] }
ΠΠ°Π²Π°ΠΉΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΠΌ ΡΠ΅ΡΠ²Π΅Ρ JSON, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ· ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° begin-elm
Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π½Π°ΠΌΠΈ HTTP-ΡΠ΅ΡΠ²Π΅Ρ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Β«ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ GETΒ», Π΅ΡΠ»ΠΈ ΠΎΠ½ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π½Π°ΠΆΠ°Π² 9.}/ ΠΏΡΠΈΠ²Π΅Ρ!
ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°/old-school.json
Π‘Π΄Π΅Π»Π°Π½Π½ΡΠΉ
Π Π΅ΡΡΡΡΡ
http://localhost:5019/ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ
ΠΠΎΠΌ
http://Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ: 5019
ΠΠ²Π΅Π΄ΠΈΡΠ΅ s + enter Π² Π»ΡΠ±ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ½ΠΈΠΌΠΎΠΊ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
.
Π‘ΠΌΠΎΡΡΡβ¦
ΠΡΠ°Π²ΠΈΡΡΡ http-server
, json-server
ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡ Π½Π°Ρ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ°ΠΉΠ», ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄ΡΡ ΠΎΡΠ΄Π°Π²Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ server/old-school.json
. ΠΠΏΡΠΈΡ --watch
ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ΅ΡΠ²Π΅ΡΡ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ Π·Π° Π»ΡΠ±ΡΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ, Π²Π½Π΅ΡΠ΅Π½Π½ΡΠΌΠΈ Π² old-school.json
. ΠΡΠ»ΠΈ ΠΌΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΡ ΠΎΠΏΡΠΈΡ, Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ΅ΡΠ²Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎΡ ΡΠ°ΠΉΠ» ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ. 9ΠΠΏΡΠΈΡ 0018 -p ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΠΎΡΡ. ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΡ ( 5019
), ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ° Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Β«ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ GETΒ», Π΅ΡΠ»ΠΈ ΠΎΠ½ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ http://localhost:5019/nicknames
Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅. ΠΡΠ»ΠΈ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅, Π·Π½Π°ΡΠΈΡ, ΡΠ΅ΡΠ²Π΅Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄ΠΎΠ»ΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
[ "ΠΡΠ΅ΡΡΠ½ΡΠΉ ΠΎΡΠ΅Ρ", "Π’Π°Π½ΠΊ", "Π¨Π°ΠΏΠΎΡΠΊΠ°", "Π‘ΡΡ" ]
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ URL-Π°Π΄ΡΠ΅Ρ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ² ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π±ΡΠ» ΡΠ°Π½ΡΡΠ΅ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Β«ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ GETΒ»:
- ΠΠΎΠ²ΡΠΉ URL-Π°Π΄ΡΠ΅Ρ Ρ
json-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ
:http://localhost:5019/ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ
- Π‘ΡΠ°ΡΡΠΉ URL-Π°Π΄ΡΠ΅Ρ Ρ
http-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ
:http://localhost:5016/old-school.
txt
Π‘ΠΎ ΡΡΠ°ΡΡΠΌ URL-Π°Π΄ΡΠ΅ΡΠΎΠΌ ΠΌΡ ΡΠΊΠ°Π·ΡΠ²Π°Π»ΠΈ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π» ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΠΎΠ²ΡΠΉ URL ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ΅ΡΡΡΡ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡ Π²ΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π°, json-server
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠ΅ΡΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΎΡΡΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π½Π°Π·Π²Π°ΡΡ ΡΠ°ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΠΎΠ±Π°Π²ΠΈΠ² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ JSON Π² old-school.json
, ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ ΠΈΠΌΡ Π½ΠΈΠΊΠΎΠ²
ΡΠ΅ΡΡΡΡΡ ["ΠΡΠ΅ΡΡΠ½ΡΠΉ ΠΎΡΠ΅Ρ", "Π’Π°Π½ΠΊ", "Π¨Π°ΠΏΠΎΡΠΊΠ°", "Π‘ΡΡ"]
.
{ "ΠΏΡΠΎΠ·Π²ΠΈΡΠ°": ["ΠΡΠ΅ΡΡΠ½ΡΠΉ ΠΎΡΠ΅Ρ", "Π’Π°Π½ΠΊ", "Π¨Π°ΠΏΠΎΡΠΊΠ°", "Π‘ΡΡ"] }
Π Π΅ΡΡΡΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΠΎΠΊ. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΠΈΠ· ΡΡΡΠ°Π½ΠΈΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ json-server
:
{ "ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ": [ { "ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ": 1, "Π½Π°Π·Π²Π°Π½ΠΈΠ΅": "json-ΡΠ΅ΡΠ²Π΅Ρ", "Π°Π²ΡΠΎΡ": "ΡΠΈΠΏΠΈΠΊΠΎΠ΄" }, { "ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ": 2, "title": "http-ΡΠ΅ΡΠ²Π΅Ρ", "Π°Π²ΡΠΎΡ": "ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠ»Ρ" } ], "ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ": [ { "ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ": 1, "ΡΠ΅Π»ΠΎ": "ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ", "ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ": 1 } ], "ΠΏΡΠΎΡΠΈΠ»Ρ": { "ΠΈΠΌΡ": "ΡΠΈΠΏΠΈΠΊΠΎΠ΄" } }
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ JSON ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΡΠΈ ΡΠ°Π·Π½ΡΡ
ΡΠ΅ΡΡΡΡΠ°: ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
, ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π²
ΠΈ ΠΏΡΠΎΡΠΈΠ»Ρ
. Π Π΅ΡΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠ΅ΠΉ, Π»ΠΈΠ±ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΡΡ.
ΠΏΠΎΡΡΠΎΠ²
ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π²
ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΠ΄Π±ΠΎΡΠΊΠ°ΠΌΠΈ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠΈΠ»Ρ
ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ΅ΡΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ, ΠΎΡΠΊΡΠ΄Π° ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊ Π½Π΅ΠΌΡ Π΄ΠΎΡΡΡΠΏ.
ΠΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΡΡΠ°Π½Π΅Ρ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠΈ ΡΠ΅ΡΡΡΡΡ ΠΈΠ· Π±ΡΠ°ΡΠ·Π΅ΡΠ°. ΠΠ΄ΠΈΡΠ΅ Π²ΠΏΠ΅ΡΠ΅Π΄ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ JSON Π² Π½ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ 9.0018 db.json Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ begin-elm/server
. db
β ΡΡΠΎ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
.
Π’Π΅ΠΏΠ΅ΡΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅ΡΠ²Π΅Ρ JSON, Π½Π°ΠΆΠ°Π² Ctrl + c
, ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΠ΅ Π΅Π³ΠΎ, ΡΡΠΎΠ±Ρ Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ ΡΠ°ΠΉΠ» db.json
.
$ json-server --watch server/db.json -p 5019
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π²ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ.
Π Π΅ΡΡΡΡΡ http://Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ: 5019/ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ http://Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ:5019/ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ http://Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ: 5019/profile
json-server
ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π» Π΄Π»Ρ Π½Π°Ρ REST API. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ΅ΡΡΡΡ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
, Π·Π°Π³ΡΡΠ·ΠΈΠ² http://localhost:5019/posts
Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅. ΠΠ°Ρ Π²ΡΠ²ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
[ { "ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ": 1, "Π½Π°Π·Π²Π°Π½ΠΈΠ΅": "json-ΡΠ΅ΡΠ²Π΅Ρ", "Π°Π²ΡΠΎΡ": "ΡΠΈΠΏΠΈΠΊΠΎΠ΄" }, { "ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ": 2, "title": "http-ΡΠ΅ΡΠ²Π΅Ρ", "Π°Π²ΡΠΎΡ": "ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠ»Ρ" } ]
posts
ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΡΡΡΠΎΠΌ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²Π½ΡΡΡΠΈ ΡΠ΅Π±Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅ΡΡΡΡΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅Ρ
, ΡΠΊΠ°Π·Π°Π² id
. ΠΡΠ»ΠΈ Π²Ρ Π·Π°Π³ΡΡΠ·ΠΈΡΠ΅ URL-Π°Π΄ΡΠ΅Ρ http://localhost:5019/posts/1
Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
{ "ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ": 1, "Π½Π°Π·Π²Π°Π½ΠΈΠ΅": "json-ΡΠ΅ΡΠ²Π΅Ρ", "Π°Π²ΡΠΎΡ": "ΡΠΈΠΏΠΈΠΊΠΎΠ΄" }
ΠΠ°Π΄Π΅ΡΡΡ, ΡΠ΅ΠΏΠ΅ΡΡ Π²Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ json-server
. ΠΠ°ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΈΠ·ΡΡΠ°ΡΡ Π²ΡΠ΅ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²Π΅ΡΠ½ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ JSON Ρ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°. Π₯ΠΎΡΠΎΡΠ°Ρ Π½ΠΎΠ²ΠΎΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²ΡΠ΅ ΡΡΠΈ Π·Π½Π°Π½ΠΈΡ ΠΏΡΠΈΠ³ΠΎΠ΄ΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΡΠ΅ΡΡΡΡΡ Π² Π³Π»Π°Π²Π΅ 7, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ POST
, PATCH
ΠΈ DELETE
ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π² ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π΅ HTTP.
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ JSON ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Elm
ΠΠ°Π²Π°ΠΉΡΠ΅ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Elm, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Β«ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ GETΒ». Π ΡΠ°ΠΉΠ»Π΅ HttpExamples.elm
, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Π²Π½ΡΡΡΠΈ begin-elm/src
, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ String.split
Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ² ΠΈΠ· ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅
: Msg -> Model -> (Model, Cmd Msg) ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ = Π΄Π΅Π»ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΡΠΏΡΠ°Π²ΠΈΡΡHttpRequest -> (ΠΌΠΎΠ΄Π΅Π»Ρ, getNicknames) DataReceived (Ok Π½ΠΈΠΊΠ½Π΅ΠΉΠΌΡStr) -> ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΡΠΎΠ·Π²ΠΈΡΠ° = String.split "," ΠΏΡΠΎΠ·Π²ΠΈΡΠ°Str Π² ( { ΠΌΠΎΠ΄Π΅Π»Ρ | ΠΏΡΠΎΠ·Π²ΠΈΡΠ° = ΠΏΡΠΎΠ·Π²ΠΈΡΠ° }, Cmd.none ) . .
ΠΠ°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΡΡΡ ΡΡΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ
. ΠΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅ΡΠ²Π΅Ρ JSON, Π½Π°ΠΆΠ°Π² Ctrl + c
, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π·Π°ΠΏΡΡΠ΅Π½, ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΠ΅ Π΅Π³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ» old-school. json .
$ json-server --watch server/old-school.json -p 5019
ΠΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π² HttpExamples.elm
, ΡΡΠΎ URL-Π°Π΄ΡΠ΅Ρ.
URL-Π°Π΄ΡΠ΅Ρ: ΡΡΡΠΎΠΊΠ° URL = "http://localhost:5019/nicknames"
ΠΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ JSON Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° Π½ΠΈΡΠ΅ΠΌ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ. Π₯ΠΎΡΡ ΠΌΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ JSON, Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠΎΡΠΌΠ°Ρ Π΄Π°Π½Π½ΡΡ , ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡΠΌΠ°Ρ 9.0062 Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½Π°Ρ ΡΡΡΠΎΠΊΠ° . ΠΡΠ»ΠΈ ΡΡΠΎ ΡΠ°ΠΊ, ΡΠΎ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ²Π΅Ρ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ? ΠΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡ ΠΆΠ΅ ΡΠ΅Ρ Π½ΠΈΠΊΡ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ² ΠΈΠ· ΡΡΡΠΎΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ JSON.
Π ΡΡΠ°ΡΡΡΡ, ΡΠ΅ΡΠ²Π΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΎΡΠ²Π΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Content-Type
. ΠΠ»Ρ JSON ΡΠ΅ΡΠ²Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ application/json
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Content-Type
. ΠΡΠΈΠ½ΠΈΠΌΠ°Ρ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π΄Π»Ρ ΡΡΡΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ/ΠΎΠ±ΡΡΠ½ΡΠΉ
.
ΠΠ΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ JSON
Elm ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅Ρ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ elm/json
, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄Π»Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ JSON. ΠΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ ΡΡΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Type System, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
$ elm install elm/json
ΠΡΠ»ΠΈ ΠΎΠ½ Π΅ΡΠ΅ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π²ΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ· ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° begin-elm
Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅. ΠΠ΅ Π·Π°ΠΏΡΡΠΊΠ°ΠΉΡΠ΅ Π΅Π³ΠΎ ΠΈΠ· ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΎΠΊΠ½Π° ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°, Π³Π΄Π΅ ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π»ΠΈ json-ΡΠ΅ΡΠ²Π΅Ρ
ΡΠ°Π½Π΅Π΅. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ. ΠΠΎΠ³Π΄Π° elm install
Π·Π°ΠΏΡΠΎΡΠΈΡ Π²Π°ΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΎΡΠ²Π΅ΡΡΡΠ΅ y
. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ Json.Decode
Π² HttpExamples.elm
.
ΠΌΠΎΠ΄ΡΠ»Ρ HttpExamples Π²ΡΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ (ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ) ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Json.Decode, ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡΠΈΠΉ (Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ, ΠΎΡΠΈΠ±ΠΊΠ° (..), decodeString, ΡΠΏΠΈΡΠΎΠΊ, ΡΡΡΠΎΠΊΠ°) . .
ΠΠ°Π»Π΅Π΅ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΌΠ΅Π΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ JSON Π² Π·Π½Π°ΡΠ΅Π½ΠΈΡ Elm. ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π½Π°Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ
. ΡΡΠ½ΠΊΡΠΈΡ Π²
HttpExamples.elm
.
ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ²Decoder : ΠΠ΅ΠΊΠΎΠ΄Π΅Ρ (ΡΡΡΠΎΠΊΠ° ΡΠΏΠΈΡΠΊΠ°) ΠΏΡΠΎΠ·Π²ΠΈΡΠ°ΠΠ΅ΠΊΠΎΠ΄Π΅Ρ = list string
ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ list string
ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² JSON Π² ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΠΎΠΊ Elm. ΠΠ²ΡΡΠΈΡ Π·Π°ΠΏΡΡΠ°Π½Π½ΠΎ, Π½Π΅ ΡΠ°ΠΊ Π»ΠΈ? ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΡΠ΅ΠΌ Ρ ΡΡΠΈΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΡΡΠΎΠ±Ρ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΡΡΡ Π΅Π³ΠΎ. ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ elm repl
ΠΈΠ· ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° begin-elm
Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅ ΠΈ Π²Π²Π΅Π΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄.
> ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Json.Decode, ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡΠΈΠΉ (..) > ΡΠΏΠΈΡΠΎΠΊ <ΡΡΠ½ΠΊΡΠΈΡ> : ΠΠ΅ΠΊΠΎΠ΄Π΅Ρ a -> ΠΠ΅ΠΊΠΎΠ΄Π΅Ρ (ΡΠΏΠΈΡΠΎΠΊ a)
ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, ΡΡΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ, ΠΊΠΎΠ³Π΄Π° Π²Π²Π΅Π»ΠΈ Π²ΡΠ΅Π³ΠΎ list
. ΠΡΠ²ΠΎΠ΄ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ ΡΠΏΠΈΡΠΎΠΊ
β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄ΡΡΠ³ΠΎΠΉ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Π²Π΅Π΄Π΅ΠΌ ΡΡΡΠΎΠΊΡ
.
> ΡΡΡΠΎΠΊΠ°: Π‘ΡΡΠΎΠΊΠ° Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΠ°
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΡ ΡΠΌΠΎΠ³Π»ΠΈ Π²Π²Π΅ΡΡΠΈ ΡΠΏΠΈΡΠΎΠΊ
ΠΈ ΡΡΡΠΎΠΊΡ
Π² repl Π±Π΅Π· ΠΏΡΠ΅ΡΠΈΠΊΡΠ° ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΡ Π²ΡΡΡΠ°Π²ΠΈΠ»ΠΈ Π²ΡΠ΅ ΠΏΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ΅ Json.
. Decode
ΠΠ΅ΠΊΠΎΠ΄Π΅Ρ ΡΡΡΠΎΠΊ
string
β ΡΡΠΎ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΌΠ΅Π΅Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡ ΡΡΡΠΎΠΊΡ JSON Π² ΡΡΡΠΎΠΊΡ Elm. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ:
> ΡΡΡΠΎΠΊΠ° decodeString "\"Π¨Π°ΠΏΠΎΡΠΊΠ°\"" Π₯ΠΎΡΠΎΡΠΎ "Π¨Π°ΠΏΠΎΡΠΊΠ°": Π‘ΡΡΠΎΠΊΠ° ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°
ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π΄Π²Π° Π½Π°Π±ΠΎΡΠ° Π΄Π²ΠΎΠΉΠ½ΡΡ
ΠΊΠ°Π²ΡΡΠ΅ΠΊ, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ "\"Π¨Π°ΠΏΠΎΡΠΊΠ°\""
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠΎΠΊΡ JSON Π² Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. 9Π‘ΡΡΠΎΠΊΠ° 0018 ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ Π½Π΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΡΠ΅Ρ JSON. ΠΡΠΎ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅ΠΏΡ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ decodeString
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. Π‘Π½Π°ΡΠ°Π»Π° ΠΎΠ½ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΡ ΡΡΡΠΎΠΊΡ Π² JSON, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ ΡΡΡΠΎΠΊΠΈ
Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ JSON Π² ΡΡΡΠΎΠΊΡ Elm.
ΠΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΏΠΎΡΡΠ½ΡΠ΅ΡΡΡ ΡΠΈΠ³Π½Π°ΡΡΡΠ° ΡΠΈΠΏΠ° decodeString
.
Json.Decode.Error
ΠΡΠΈ ΡΠ±ΠΎΠ΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ decodeString
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Error
. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ:
> ΡΡΡΠΎΠΊΠ° decodeString "42" Err (ΠΡΠΊΠ°Π· ("ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ STRING") <Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅>) : Result Error String
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π₯ΠΎΡΡ ΠΌΡ Π·Π°ΠΊΠ»ΡΡΠΈΠ»ΠΈ 42
Π² Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ, ΡΡΠΎ Π½Π΅ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΡΡΠΎΠΊΠΎΠΉ JSON. Π§ΡΠΎΠ±Ρ ΡΡΠΎ Π±ΡΠ»Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ ΡΡΡΠΎΠΊΠ° JSON, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π½Π°Π±ΠΎΡ Π΄Π²ΠΎΠΉΠ½ΡΡ
ΠΊΠ°Π²ΡΡΠ΅ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
"\"42\""
.
Π’ΠΈΠΏ ΠΡΠΈΠ±ΠΊΠ°
ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² ΠΠΎΠ΄ΡΠ»Ρ Json.Decode
ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π’ΠΈΠΏ ΠΡΠΈΠ±ΠΊΠ° = ΠΡΠΈΠ±ΠΊΠ° ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΠ»Ρ | ΠΡΠΈΠ±ΠΊΠ° ΠΈΠ½Π΄Π΅ΠΊΡΠ° | OneOf (ΠΎΡΠΈΠ±ΠΊΠ° ΡΠΏΠΈΡΠΊΠ°) | ΠΡΠΈΠ±ΠΊΠ° Π‘ΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
ΠΡΠΎ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΡΠΈΠΏ. Π Π°Π½Π΅Π΅ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Β«Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΠΈΠΏΠΎΠ²Β» ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΡΠΈΠΏ:
.
Π²Π²Π΅Π΄ΠΈΡΠ΅ MyList a = ΠΡΡΡΠΎ | Node a (MyList a)
ΠΡ Π·Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ ΡΡ ΠΎΠ΄ΡΡΠ²ΠΎ? ΠΠ±Π° ΡΠΈΠΏΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΌ. ΠΠ΅Π· ΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² Π΄Π°Π½Π½ΡΡ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π±Ρ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ:
Π£Π·Π΅Π» 16 (Π£Π·Π΅Π» 5 (Π£Π·Π΅Π» 31 (Π£Π·Π΅Π» 9) (Π£Π·Π΅Π» 18 (Π£Π·Π΅Π» 7 (Π£Π·Π΅Π» 26 (...)))))))
ΠΠΎ ΠΏΠΎΡΠ΅ΠΌΡ ΡΠΈΠΏ ΠΡΠΈΠ±ΠΊΠ°
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΡΠ»ΠΎΠΆΠ½ΡΠΌ? ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΡΡΠΎ ΡΡΡΠΎΠΊΠΎΠΉ? ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π΄ΠΎ Elm 0. 19 ΡΡΠΎ Π±ΡΠ»Π° ΠΏΡΠΎΡΡΠΎ ΡΡΡΠΎΠΊΠ°. Π‘ΠΎΠ·Π΄Π°Π² Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΡΠΈΠΏ, Π°Π²ΡΠΎΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ°
elm/json
Π΄Π°Π»ΠΈ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΡ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π²ΠΎΠ·Π½ΠΈΠΊΡΠ΅ΠΉ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π²Π΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ JSON ΠΈ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΡΠ°ΡΡΡ, Π²ΡΠ·Π²Π°Π²ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ, ΠΊΡΠ°ΡΠ½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ.
ΠΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π²Π΄Π°Π²Π°ΡΡΡΡ Π² ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, Π½ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΡΡΠΈΡΡ ΡΡΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² Β«ΠΠ΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ JSON β ΡΠ°ΡΡΡ 1Β» ΠΈ Β«ΠΠ΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ JSON β ΡΠ°ΡΡΡ 2Β».
ΠΡΡΠ³ΠΈΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΡ
Elm ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠΈ Π΄ΡΡΠ³ΠΈΡ
Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΠ° Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ
ΡΠΈΠΏΠΎΠ² JSON Π² Π·Π½Π°ΡΠ΅Π½ΠΈΡ Elm: int
, float
ΠΈ bool
. ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΡ
ΠΈΡ
Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ:
> decodeString ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ "9" Ok 9: ΠΡΠΈΠ±ΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Int > decodeString int "2.5" Err (ΠΡΠΈΠ±ΠΊΠ° ("ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ INT") <Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅>) : Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΡΠΈΠ±ΠΊΠ° Π¦Π΅Π». > decodeString Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ "2.5" Π₯ΠΎΡΠΎΡΠΎ 2.5: ΠΡΠΈΠ±ΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ > decodeString bool "ΠΈΡΡΠΈΠ½Π°" Ok True : Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΡΠΈΠ±ΠΊΠ° Bool > decodeString Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ "false" OK False : Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΡΠΈΠ±ΠΊΠ° Bool > decodeString bool "87" Err (ΠΡΠΈΠ±ΠΊΠ° ("ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ BOOL") <Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅>) : Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΡΠΈΠ±ΠΊΠ° Bool
ΠΠ΅ΡΠΈΡΡΠ°ΡΠΎΡΡ ΡΡΡΠΎΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠΎΠ²
JSON ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ :
string β Π‘ΡΡΠΎΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π° Π² Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ ΠΈ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° ΡΡΡΠΎΠΊΡ Elm.
ΡΠΈΡΠ»ΠΎ β Π§ΠΈΡΠ»ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ΅Π»ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ ΠΈΠ»ΠΈ Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ.
Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ β Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π»ΠΈΠ±ΠΎ
true
, Π»ΠΈΠ±ΠΎfalse
.array β ΠΠ°ΡΡΠΈΠ² ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π»ΡΠ±ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ JSON, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ°ΠΌΠΈ ΠΌΠ°ΡΡΠΈΠ²Ρ.
ΠΎΠ±ΡΠ΅ΠΊΡ β ΠΠ±ΡΠ΅ΠΊΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΏΠ°Ρ ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
null β
null
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΡ ΡΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΠΈ, ΡΠΈΡΠ»Π° ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π§ΡΠΎΠ±Ρ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΡΠΎΠΈΡΠ΅Π»ΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΎΠ². ΠΠ°ΡΠ½Π΅ΠΌ Ρ ΠΌΠ°ΡΡΠΈΠ²Π° JSON.
ΠΠ΅ΠΊΠΎΠ΄Π΅Ρ ΡΠΏΠΈΡΠΊΠ°
Π Π°Π½Π΅Π΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΠΌΠ°ΡΡΠΈΠ²Π° ΡΡΡΠΎΠΊ JSON Π² ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΠΎΠΊ Elm.
ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ²Decoder : ΠΠ΅ΠΊΠΎΠ΄Π΅Ρ (ΡΡΡΠΎΠΊΠ° ΡΠΏΠΈΡΠΊΠ°) ΠΏΡΠΎΠ·Π²ΠΈΡΠ°ΠΠ΅ΠΊΠΎΠ΄Π΅Ρ = list string
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ list string
ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
> ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌJson = "[\"ΠΡΠ΅ΡΡΠ½ΡΠΉ ΠΎΡΠ΅Ρ\", \"Π’Π°Π½ΠΊ\", \"Π¨Π°ΠΏΠΎΡΠΊΠ°\", \"Π‘ΡΡ\"]" "[\"ΠΡΠ΅ΡΡΠ½ΡΠΉ ΠΎΡΠ΅Ρ\", \"Π’Π°Π½ΠΊ\", \"Π¨Π°ΠΏΠΎΡΠΊΠ°\", \"Π‘ΡΡ\"]" : String > decodeString (ΡΡΡΠΎΠΊΠ° ΡΠΏΠΈΡΠΊΠ°) NickJson Π₯ΠΎΡΠΎΡΠΎ [Β«ΠΡΠ΅ΡΡΠ½ΡΠΉ ΠΎΡΠ΅ΡΒ», Β«Π’Π°Π½ΠΊΒ», Β«Π¨Π°ΠΏΠΎΡΠΊΠ°Β», Β«Π‘ΡΡΒ»] : ΠΡΠΈΠ±ΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° (ΡΡΡΠΎΠΊΠ° ΡΠΏΠΈΡΠΊΠ°)
Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π» JSON (ΠΈΠ»ΠΈ ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ) ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
> decodeString (ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π») "[1, 2, 3]" Ok [1,2,3]: ΠΎΡΠΈΠ±ΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° (List Int) > decodeString (ΡΠΏΠΈΡΠΎΠΊ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ) "[1.5, 2.5]" Π₯ΠΎΡΠΎΡΠΎ [1.5,2.5]: ΠΡΠΈΠ±ΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° (ΡΠΏΠΈΡΠΎΠΊ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ)
ΡΠΏΠΈΡΠΎΠΊ
ΡΠ°ΠΌ ΠΏΠΎ ΡΠ΅Π±Π΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΠΎΠΌ. ΠΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±Π΅ΡΠ΅Ρ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΉ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ. ΠΠΎΡ ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΡ ΡΠΈΠΏΠ°:
ΡΠΏΠΈΡΠΎΠΊ : ΠΠ΅ΠΊΠΎΠ΄Π΅Ρ a -> ΠΠ΅ΠΊΠΎΠ΄Π΅Ρ (ΡΠΏΠΈΡΠΎΠΊ a)
ΠΡΠ»ΠΈ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ JSON, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠΈΡΠΎΠΊ
Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΠΎΠ² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
> decodeString (ΡΠΏΠΈΡΠΎΠΊ (ΡΠΏΠΈΡΠΎΠΊ int)) "[[1, 2], [4, 5]]" Π₯ΠΎΡΠΎΡΠΎ [[1,2],[4,5]] : Result Error (List (List Int))
ΠΠ»ΡΠ±ΠΈΠ½Π° Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΠΈ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π°. ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ Elm ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ List
Π±ΡΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² JSON Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ.
> decodeString (ΡΠΏΠΈΡΠΎΠΊ (ΡΠΏΠΈΡΠΎΠΊ int)) "[[1, 2], [3.5, 4.5]]" Err (ΠΠ½Π΄Π΅ΠΊΡ 1 (ΠΠ½Π΄Π΅ΠΊΡ 0 (Π‘Π±ΠΎΠΉ ("ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ INT") <Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅>))) : ΠΡΠΈΠ±ΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° (Π‘ΠΏΠΈΡΠΎΠΊ (Π‘ΠΏΠΈΡΠΎΠΊ ΡΠ΅Π»ΡΡ ))
ΠΠ°ΠΌΠ΅Π½Π°
String.
Π½Π° split
Π½ΠΈΠΊΠΎΠ² ΠΠ΅ΠΊΠΎΠ΄Π΅Ρ
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠΎΠ½ΡΠ»ΠΈ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΡ list
ΠΈ string
, Π΄Π°Π²Π°ΠΉΡΠ΅ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ HttpExamples.elm
ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ String.split
Π½Π° ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ²Decoder
Π² DataReceived ( ΠΠΊ Π½ΠΈΠΊΠ½Π΅ΠΉΠΌΡStr) -> Π²Π΅ΡΠΊΠ°
Π²Π½ΡΡΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅
.
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅
: Msg -> Model -> (Model, Cmd Msg) ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ = Π΄Π΅Π»ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· . . DataReceived (ΠΎΠΊΠ΅ΠΉ Π½ΠΈΠΊΠ½Π΅ΠΉΠΌΡJson) -> case decodeString ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡΠΠ΅ΠΊΠΎΠ΄Π΅ΡΠ½ΡΠ΅ Π½ΠΈΠΊΠ½Π΅ΠΉΠΌΡJson of ΠΠΊ Π½ΠΈΠΊΠ½Π΅ΠΉΠΌΡ -> ( { ΠΌΠΎΠ΄Π΅Π»Ρ | ΠΏΡΠΎΠ·Π²ΠΈΡΠ° = ΠΏΡΠΎΠ·Π²ΠΈΡΠ° }, Cmd.none ) ΠΡΠΈΠ±ΠΊΠ° ΠΎΡΠΈΠ±ΠΊΠΈ -> ( {ΠΌΠΎΠ΄Π΅Π»Ρ | errorMessage = ΠΎΡΠΈΠ±ΠΊΠ° handleJsonError } , Cmd.none ) . .
ΠΡ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π»ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Ρ Π½ΠΈΠΊΠ½Π΅ΠΉΠΌΠΎΠ²Str
Π½Π° Π½ΠΈΠΊΠ½Π΅ΠΉΠΌΠΎΠ²Json
ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ let
Π½Π° case
. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ
String.split
, decodeString
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
. ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ case
Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π½ΠΈΠΊΠ½Π΅ΠΉΠΌΠΎΠ² ΠΈΠ· Ok
. ΠΡΠ»ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΡΠ΄Π°Π΅ΡΡΡ, Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ handleJsonError
. ΠΠ°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π½ΠΈΠΆΠ΅ update
.
handleJsonError : Json.Decode.Error -> ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΡΠΎΠΊΠ° ΠΎΡΠΈΠ±ΠΊΠ° handleJsonError = ΡΠ»ΡΡΠ°ΠΉΠ½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΠΡΠΈΠ±ΠΊΠ° errorMessage _ -> ΠΡΠΎΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ _ -> ΠΡΠΎΡΡΠΎ Β«ΠΡΠΈΠ±ΠΊΠ°: Π½Π΅Π²Π΅ΡΠ½ΡΠΉ JSONΒ»
ΠΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π΄Π°Π½Π½ΡΡ
Failure
, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π½Π΅ΠΌ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅. ΠΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Failure
β ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ JSON, Π²ΡΠ·Π²Π°Π²ΡΠ΅Π΅ ΡΠ±ΠΎΠΉ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΌΡ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π½Π° 9.0018 _ .
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ elm Reactor
ΠΈΠ· ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° begin-elm
Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΅ΡΠ΅ Π½Π΅ Π·Π°ΠΏΡΡΠ΅Π½, ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ ΠΏΠΎ ΡΡΠΎΠΌΡ URL-Π°Π΄ΡΠ΅ΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅: http://localhost:8000/src/HttpExamples.
. ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° , ΠΈ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ GET. elm
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ http-server
, json-server
Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°ΠΌΠΈ (CORS). ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠΌ ΡΠ΅ΡΡΡΡΠ΅ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Β«Access-Control-Allow-OriginΒ». ΠΡΠΈΠ±ΠΊΠ°
ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ Π½ΠΈΠΊΠ½Π΅ΠΉΠΌΠΎΠ².
ΠΠ°ΠΌΠ΅Π½Π°
expectString
Π½Π° expectJson
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΏΡΠΎΡΠ»ΠΈ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ JSON.
Π¨Π°Π³ 1: Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Http.get
. Π£ΠΊΠ°ΠΆΠΈΡΠ΅, ΠΊΠ°ΠΊΠΎΠΉ URL ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΠΈ ΡΠΎΠΎΠ±ΡΠΈΡΠ΅ ΡΡΠ΅Π΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Elm, ΡΡΠΎ ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ, ΡΡΠΎ ΠΎΡΠ²Π΅Ρ Π±ΡΠ΄Π΅Ρ ΡΡΡΠΎΠΊΠΎΠΉ.
getNicknames : Cmd Msg ΠΏΠΎΠ»ΡΡΠΈΡΡΠ½ΠΈΠΊΠ½Π΅ΠΉΠΌΡ = http.ΠΏΠΎΠ»ΡΡΠΈΡΡ { URL-Π°Π΄ΡΠ΅Ρ = URL-Π°Π΄ΡΠ΅Ρ , ΠΎΠΆΠΈΠ΄Π°ΡΡ = Http.expectString DataReceived }
Π¨Π°Π³ 2: Π‘ΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
Π¨Π°Π³ 3: Π‘ΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ DataReceived
ΡΡΠ½ΠΊΡΠΈΠΈ update
.
- Π¨Π°Π³ 3.1: ΠΠΊΠ»ΡΡΠΈΡΠ΅ JSON Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ, Π΅ΡΠ»ΠΈ Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ² Π²ΡΠΏΠΎΠ»Π½Π΅Π½ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
- Π¨Π°Π³ 3.2: ΠΠΊΠ»ΡΡΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΡΠΈΠΏΠ°
Http.Error
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ, Π΅ΡΠ»ΠΈ Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ² Π½Π΅ ΡΠ΄Π°Π΅ΡΡΡ.
Π¨Π°Π³ 4: ΠΠ΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ JSON Π²Π½ΡΡΡΠΈ DataReceived (Ok NicksJson) ->
Π²Π΅ΡΠ²Ρ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ
.
- Π¨Π°Π³ 4.1: ΠΡΠ»ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ»ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ
ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ²
Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ. - Π¨Π°Π³ 4.2: ΠΡΠΈ ΡΠ±ΠΎΠ΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ
errorMessage
Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠΎΡΡΠΈΡΡ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Http.
Π²ΠΌΠ΅ΡΡΠΎ expectJson
Http.expectString
Π² getNicknames
. ΠΠΎΡ ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ:
Π¨Π°Π³ 1: Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Http.get
. Π£ΠΊΠ°ΠΆΠΈΡΠ΅, ΠΊΠ°ΠΊΠΎΠΉ URL ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΠΈ ΡΠΎΠΎΠ±ΡΠΈΡΠ΅ ΡΡΠ΅Π΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Elm, ΡΡΠΎ ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ ΠΎΡΠ²Π΅Ρ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON.
getNicknames : Cmd Msg ΠΏΠΎΠ»ΡΡΠΈΡΡΠ½ΠΈΠΊΠ½Π΅ΠΉΠΌΡ = http.ΠΏΠΎΠ»ΡΡΠΈΡΡ { URL-Π°Π΄ΡΠ΅Ρ = URL-Π°Π΄ΡΠ΅Ρ , expect = Http.expectJson DataReceived Π½ΠΈΠΊΠ½Π΅ΠΉΠΌΠΎΠ²Decoder }
Π¨Π°Π³ 2: Π‘ΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
Π¨Π°Π³ 3: Π‘ΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ 9Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ 0018 DataReceived Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ
.
Π¨Π°Π³ 3.1: ΠΠΊΠ»ΡΡΠΈΡΡ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ, Π΅ΡΠ»ΠΈ Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ JSON ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
Π¨Π°Π³ 3.2: ΠΠΊΠ»ΡΡΠΈΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ ΡΠΈΠΏΠ°
Http.Error
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΡΠ±ΠΎΡ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ JSON ΠΈΠ»ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ°ΠΌ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΅Π½ ΡΠ°Π³ 4 Π΅ΡΠ»ΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Http.expectJson
. ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ JSON ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π·Π° ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·. ΠΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΡΠ΅ΠΌ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Http.expectString
ΠΈ Http.expectJson
.
ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅ Http.expectString
Π½Π° Http.expectJson
Π² getNicknames
, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²ΡΡΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ Π΅ΡΠ΅ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ. ΠΠ°Π»Π΅Π΅ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π²Π΅ΡΠΊΡ DataReceived (Ok NicknamesJson) ->
Π² update
.
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅
: Msg -> Model -> (Model, Cmd Msg) ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ = Π΄Π΅Π»ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· . . DataReceived (ΠΎΠΊΠ΅ΠΉ Π½ΠΈΠΊΠΈ) -> ( { ΠΌΠΎΠ΄Π΅Π»Ρ | ΠΏΡΠΎΠ·Π²ΠΈΡΠ° = ΠΏΡΠΎΠ·Π²ΠΈΡΠ° }, Cmd.none ) ΠΠΎΠ»ΡΡΠ΅Π½ΠΎ Π΄Π°Π½Π½ΡΡ (ΠΎΡΠΈΠ±ΠΊΠ° httpError) -> ...
Http.expectJson
Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΡΠΈΠ» ΡΡΡ Π²Π΅ΡΠΊΡ. ΠΠ°ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΡΡΠ½ΡΡ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ JSON. ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π° ΠΊΡΠ»ΠΈΡΠ°ΠΌΠΈ. ΠΡΠ»ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ»ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Elm, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π·Π½Π°ΡΠΈΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² ΠΏΠΎΠ»Π΅
ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ²
Π² Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ DataReceived
, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ½ΡΡΡ List String
Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ String
.
ΡΠΈΠΏ Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ = ΠΡΠΏΡΠ°Π²ΠΈΡΡHttpRequest | DataReceived (ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Http.Error (ΡΡΡΠΎΠΊΠ° ΡΠΏΠΈΡΠΊΠ°))
ΠΠ°ΠΌ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π²Π΅ΡΠΊΡ DataReceived (Err httpError) ->
Π² update
. Π ΡΠ»ΡΡΠ°Π΅ ΡΠ±ΠΎΡ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π° ΠΎΡΠΈΠ±ΠΊΠ° Http.BadBody
, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠΆΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ Π² buildErrorMessage
. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΠ΄Π°Π»ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ handleJsonError
. ΠΠ°ΠΌ ΡΡΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ.
ΠΠ±Π½ΠΎΠ²ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ http://localhost:8000/src/HttpExamples.elm
ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°
. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΅ΡΠ΅ ΡΠ°Π· ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π½ΠΈΠΊΠ½Π΅ΠΉΠΌΠΎΠ².
Π Π΅Π·ΡΠΌΠ΅
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΡΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ, Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ JSON. ΠΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ JSON Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π»ΠΈ Π΅Π³ΠΎ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΡ Elm Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΠ°. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΎΠ±ΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ JSON Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Http.expectJson
Π²ΠΌΠ΅ΡΡΠΎ Http.expectString
. ΠΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ ΠΎΠ±ΡΠ΅Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ΅Π΄ΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Elm ΠΈ Π½Π°ΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π½Π΅ ΡΠΈΠ»ΡΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΠ°Π·Π΄Π΅Π»ΠΎΠΌ Β«ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ GETΒ».
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΡΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΉ JSON. ΠΠΎΡ Π²Π΅ΡΡ ΠΊΠΎΠ΄ ΠΈΠ· HttpExamples.elm
Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ:
ΠΌΠΎΠ΄ΡΠ»Ρ HttpExamples Π²ΡΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ (ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ)
ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π±ΡΠ°ΡΠ·Π΅Ρ
ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ HTML-ΡΠ°Π·ΠΎΠ±Π»Π°ΡΠ΅Π½ΠΈΠ΅ (..)
ΠΈΠΌΠΏΠΎΡΡ Html.Events (onClick)
ΠΈΠΌΠΏΠΎΡΡ HTTP
ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Json.Decode, ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡΠΈΠΉ (Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ, ΠΎΡΠΈΠ±ΠΊΠ° (..), decodeString, ΡΠΏΠΈΡΠΎΠΊ, ΡΡΡΠΎΠΊΠ°)
Π²Π²Π΅Π΄ΠΈΡΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ ΠΠΎΠ΄Π΅Π»Ρ =
{ ΠΏΡΠΎΠ·Π²ΠΈΡΠ° : ΡΡΡΠΎΠΊΠ° ΡΠΏΠΈΡΠΊΠ°
, errorMessage : ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π‘ΡΡΠΎΠΊΠ°
}
ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅: ΠΠΎΠ΄Π΅Π»Ρ -> Html Msg
ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° =
ΡΠ°Π·Π΄Π΅Π» []
[ΠΊΠ½ΠΎΠΏΠΊΠ° [ onClick SendHttpRequest ]
[ ΡΠ΅ΠΊΡΡ "ΠΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°" ]
, ΠΌΠΎΠ΄Π΅Π»Ρ viewNicknamesOrError
]
viewNicknamesOrError: ΠΠΎΠ΄Π΅Π»Ρ -> Html Msg
ΠΌΠΎΠ΄Π΅Π»Ρ viewNicknamesOrError =
case model.errorMessage of
ΠΡΠΎΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ->
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°
ΠΠΈΡΠ΅Π³ΠΎ ->
viewNicknames model.nicknames
viewError: ΡΡΡΠΎΠΊΠ° -> Html-ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
viewError errorMessage =
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ
ΠΎΡΠΈΠ±ΠΊΠ°ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ =
"Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ."
Π²
ΡΠ°Π·Π΄Π΅Π» []
[ h4 [] [ΡΠ΅ΠΊΡΡΠΎΠ²Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ]
, ΡΠ΅ΠΊΡΡ ("ΠΡΠΈΠ±ΠΊΠ°: " ++ errorMessage)
]
viewNicknames : Π‘ΡΡΠΎΠΊΠ° ΡΠΏΠΈΡΠΊΠ° -> Html Msg
Π½ΠΈΠΊΠ½Π΅ΠΉΠΌΡ viewNicknames =
ΡΠ°Π·Π΄Π΅Π» []
[ h4 [] [ΡΠ΅ΠΊΡΡ "ΠΠ»Π°Π²Π½ΡΠ΅ Π³Π΅ΡΠΎΠΈ ΡΡΠ°ΡΠΎΠΉ ΡΠΊΠΎΠ»Ρ" ]
, ul [] (List.map viewNickname Π½ΠΈΠΊΠ½Π΅ΠΉΠΌΡ)
]
viewNickname : String -> Html Msg
Π½ΠΈΠΊΠ½Π΅ΠΉΠΌ viewNickname =
li [] [ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΈΠΌΡ]
Π²Π²Π΅Π΄ΠΈΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
= ΠΡΠΏΡΠ°Π²ΠΈΡΡHttpRequest
| DataReceived (ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Http.Error (ΡΡΡΠΎΠΊΠ° ΡΠΏΠΈΡΠΊΠ°))
URL-Π°Π΄ΡΠ΅Ρ: ΡΡΡΠΎΠΊΠ°
URL =
"http://Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ:5019/ΠΏΡΠΎΠ·Π²ΠΈΡΠ°"
getNicknames : Cmd Msg
ΠΏΠΎΠ»ΡΡΠΈΡΡΠ½ΠΈΠΊΠ½Π΅ΠΉΠΌΡ =
http.ΠΏΠΎΠ»ΡΡΠΈΡΡ
{ URL-Π°Π΄ΡΠ΅Ρ = URL-Π°Π΄ΡΠ΅Ρ
, expect = Http.expectJson DataReceived Π½ΠΈΠΊΠ½Π΅ΠΉΠΌΠΎΠ²Decoder
}
Π½ΠΈΠΊΠ½Π΅ΠΉΠΌΡΠΠ΅ΠΊΠΎΠ΄Π΅Ρ : ΠΠ΅ΠΊΠΎΠ΄Π΅Ρ (ΡΡΡΠΎΠΊΠ° ΡΠΏΠΈΡΠΊΠ°)
ΠΏΡΠΎΠ·Π²ΠΈΡΠ°ΠΠ΅ΠΊΠΎΠ΄Π΅Ρ =
ΡΡΡΠΎΠΊΠ° ΡΠΏΠΈΡΠΊΠ°
ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅: Msg -> Model -> (Model, Cmd Msg)
ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ =
Π΄Π΅Π»ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·
ΠΡΠΏΡΠ°Π²ΠΈΡΡHttpRequest ->
(ΠΌΠΎΠ΄Π΅Π»Ρ, getNicknames)
DataReceived (ΠΎΠΊΠ΅ΠΉ Π½ΠΈΠΊΠΈ) ->
( { ΠΌΠΎΠ΄Π΅Π»Ρ | ΠΏΡΠΎΠ·Π²ΠΈΡΠ° = ΠΏΡΠΎΠ·Π²ΠΈΡΠ° }, Cmd.none )
ΠΠΎΠ»ΡΡΠ΅Π½ΠΎ Π΄Π°Π½Π½ΡΡ (ΠΎΡΠΈΠ±ΠΊΠ° httpError) ->
( { ΠΌΠΎΠ΄Π΅Π»Ρ
| errorMessage = ΠΡΠΎΡΡΠΎ (buildErrorMessage httpError)
}
, Cmd.none
)
buildErrorMessage : Http.