Panga na Thibitisha JSON
Bandika JSON ili kuipanga vizuri, kuibana au kupanga funguo zake. Isiposomeka, zana inaonyesha mstari na safu ambapo kichanganuzi kilikwama, pamoja na kiashiria chini ya tatizo, kwa hivyo koma iliyokosekana katika jibu la mistari 3,000 inapatikana kwa sekunde chache.
Herufi 0 · maneno 0 · mistari 0
Herufi 0 · maneno 0 · mistari 0
Inafanya kazi kabisa ndani ya kichupo hiki cha kivinjari. Maandishi yako hayapakiwi wala kuhifadhiwa.
Aina za thamani za JSON
RFC 8259 inaruhusu thamani hizi pekee. Objekti na safu huweza kuwekwa ndani ya nyingine; vingine vyote ni majani.
| Aina | Mfano | Kanuni |
|---|---|---|
| Objekti | {"id": 7, "tags": ["a"]} | Funguo lazima ziwe mifuatano ya herufi yenye nukuu mbili; vipengele hutenganishwa kwa koma bila koma ya mwisho. |
| Safu | [1, "two", null] | Orodha yenye mpangilio ya thamani yoyote, aina mchanganyiko zinaruhusiwa. |
| Mfuatano wa herufi | "caf\u00e9 \"quoted\"" | Nukuu mbili pekee; herufi za udhibiti lazima zitoroshwe; \u hutumia tarakimu nne za hex. |
| Namba | -12.5e3 | Desimali pekee: alama ya kutoa hiari, bila sifuri za mwanzo, sehemu ya desimali na kipeo ni hiari. Hakuna NaN wala Infinity. |
| true, false na null | true | Herufi ndogo, bila nukuu. |
Kinachokataliwa na kichanganuzi
Kila ingizo hapa chini lilipitishwa kwenye JSON.parse ile ile inayotumiwa na kiumbizaji wakati ukurasa huu ulipojengwa.
| Ingizo | Tatizo | JSON.parse |
|---|---|---|
{"a": 1,} | Koma ya mwisho | Imekataliwa |
{'a': 1} | Mifuatano yenye nukuu moja | Imekataliwa |
{"a": 1 /* note */} | Maoni | Imekataliwa |
{a: 1} | Ufunguo bila nukuu | Imekataliwa |
{"n": NaN} | NaN si namba ya JSON | Imekataliwa |
{"n": 012} | Sifuri ya mwanzo | Imekataliwa |
{"n": 0x1F} | Namba ya heksadesimali | Imekataliwa |
Escape katika mifuatano ya JSON
| Herufi | Imeandikwa katika JSON |
|---|---|
| Nukuu mbili | "\"" |
| Mkwaju wa nyuma | "\\" |
| Mlisho wa mstari | "\n" |
| Tabu | "\t" |
| Carriage return | "\r" |
| Herufi ya udhibiti U+0001 | "\u0001" |
| Mkwaju wa mbele (escape ni hiari) | "/" |
| Herufi isiyo ya ASCII (hakuna escape inayohitajika) | "é" |
Kanuni ambazo hati halali ya JSON hufuata
JSON imebainishwa na RFC 8259 (kimsingi ni sawa na ECMA-404). Hati ni thamani moja: kitu (object), safu (array), mfuatano wa maandishi (string), nambari, true, false au null. Funguo za kitu daima ni mifuatano ndani ya alama za nukuu mbili. Mifuatano hutumia nukuu mbili tu, na lazima ikwepe nukuu, mkwaju wa nyuma (backslash) na kila herufi ya udhibiti iliyo chini ya U+0020; kwa hiyo tab na mistari mipya ndani ya mfuatano huandikwa kama \t na \n. RFC 8259 pia inahitaji UTF-8 kwa JSON inayobadilishwa kati ya mifumo.
Nambari ni za desimali: hakuna sifuri mwanzoni, hakuna heksadesimali, hakuna NaN wala Infinity, na hakuna alama ya kujumlisha mbele. Muundo huu hauna maoni wala koma ya mwishoni. Kanuni hizi mbili za mwisho husababisha makosa mengi ya kila siku, kwa sababu vitu halisi vya JavaScript, JSON5 na faili nyingi za usanidi huruhusu vyote viwili. Jedwali la marejeo hapa chini lilitengenezwa kwa kulisha kila kosa la kawaida kwenye kichanganuzi kilekile kinachotumiwa na kipangaji.
Panga vizuri, bana, panga funguo
Kupanga kwa mpangilio mzuri (pretty-print) huongeza mistari mipya na nafasi za mwanzo ili muundo usomeke; nafasi mbili ndizo mtindo unaotumika zaidi katika miradi ya JavaScript, nafasi nne ni chaguo la kawaida kwa json.dumps(indent=4) ya Python, na tab humwezesha kila msomaji kuchagua upana. Kupunguza (minify) huondoa kila nafasi isiyo na umuhimu, jambo linalopunguza ukubwa wa data ya API na kuwezesha hati kutoshea kwenye mstari mmoja kwa kumbukumbu za mfumo (logs) au vigeu vya mazingira.
Panga funguo hupanga washiriki wa kila kitu kwa mpangilio wa alfabeti, kwa kujirudia. Vitu vya JSON havina mpangilio kwa ufafanuzi, hivyo kupanga hakubadilishi maana, lakini hurahisisha sana kulinganisha hati mbili kutoka mifumo tofauti. Fahamu kwamba uchanganuzi hugeuza nambari kuwa doubles za JavaScript: namba kamili zilizo juu ya 2^53 (9,007,199,254,740,992), kama vitambulisho vya baadhi ya hifadhidata, hupoteza usahihi zinapopangwa upya, kwa hiyo zihifadhi kama mifuatano ya maandishi.
Kutoka JSON kwenda miundo mingine
Hati iliyopangwa husomeka kwa urahisi, lakini wakati mwingine unaihitaji katika umbo jingine. Safu ya vitu hugeuka kuwa lahajedwali kwa JSON kuwa CSV, na kibadilishaji data husogeza faili nzima kati ya JSON, XML, YAML na CSV.
Maswali yanayoulizwa mara kwa mara
- Kwa nini zana inakataa JSON yangu yenye maoni (comments)?
- JSON ya kawaida haina sintaksia ya maoni; RFC 8259 iliiacha kwa makusudi. Ondoa maoni, au weka faili kama JSONC au JSON5 ikiwa zana inayoisoma inaunga mkono miundo hiyo.
- "Unexpected token" inamaanisha nini katika kosa la JSON?
- Kichanganuzi kimekutana na herufi ambayo haiwezi kuwepo katika nafasi hiyo, kama nukuu moja, koma kabla ya } au ufunguo usio na nukuu. Mstari na safu wima zinazoonyeshwa zinaelekeza kwenye herufi hiyo.
- Je, kupanga funguo kunabadilisha data yangu?
- Hapana. Mpangilio wa washiriki wa kitu hauna maana katika JSON, kwa hiyo hati iliyopangwa ni sawa kimaana. Mpangilio wa safu (array) una maana na haubadilishwi kamwe.
- Kwa nini nambari ndefu ilibadilika baada ya kupanga JSON?
- JavaScript huhifadhi nambari kama floats za biti 64, ambazo huwakilisha namba kamili kwa usahihi hadi 2^53 tu. Vitambulisho vikubwa zaidi hukadiriwa vinapochanganuliwa; vitume kama mifuatano ya maandishi ili kuhifadhi kila tarakimu.
- Je, ninaweza kupanga faili ya JSON badala ya kubandika?
- Fungua faili kwenye kihariri chochote cha maandishi, chagua yote kisha ibandike hapa. Faili kubwa sana za makumi ya megabaiti zinaweza kufanya kichupo kiwe polepole wakati kisanduku cha maandishi kinapozionyesha.