JSON(JavaScript Object Notation)是一種常用的數(shù)據(jù)交換格式,它采用文本形式表示數(shù)據(jù),具有易讀、易解析和跨語(yǔ)言等優(yōu)點(diǎn)。在C語(yǔ)言中,我們可以使用JSON解析器進(jìn)行JSON數(shù)據(jù)的解析,但是如果JSON數(shù)據(jù)中存在無(wú)效的基元(不符合JSON語(yǔ)法規(guī)則),就會(huì)導(dǎo)致解析錯(cuò)誤。
以下是一些無(wú)效的JSON基元:
{ "name": "Tom", "age": 25, "isMarried": true, "hometown": null, "scores": [90, 80, "70"], "address": { "city": "Shanghai", "street": "Nanjing Road" } }
在上面的JSON數(shù)據(jù)中,有一個(gè)無(wú)效的基元:數(shù)組中的"70"。這個(gè)基元不符合JSON語(yǔ)法規(guī)則,因?yàn)镴SON數(shù)組中應(yīng)該只包含數(shù)字、字符串、布爾值、null、對(duì)象和數(shù)組等基元類(lèi)型。
當(dāng)我們使用C語(yǔ)言中的JSON解析器嘗試解析上面的JSON數(shù)據(jù)時(shí),就會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤,如下所示:
json_error_t error; json_t *root = json_loads("{\"name\": \"Tom\",\"age\": 25,\"isMarried\": true,\"hometown\": null,\"scores\": [90, 80, \"70\"],\"address\": {\"city\": \"Shanghai\",\"street\": \"Nanjing Road\"}}", 0, &error); if (!root) { printf("JSON error on line %d: %s\n", error.line, error.text); }
輸出結(jié)果為:
JSON error on line 1: [source]: Expecting value: line 1 column 47 (char 47)
因此,在使用C語(yǔ)言中的JSON解析器時(shí),需要注意JSON數(shù)據(jù)中是否包含無(wú)效的基元。這樣才能順利地解析JSON數(shù)據(jù)。