/ / TCL Json обект с тире - json, parsing, tcl

TCL Json обект с тире - json, parsing, tcl

използвайки tcl, a може да създава и анализира обект на обект но ако името на елемента съдържа тире (-), създаденият низ вече не се вижда като валиден Json обект

set jsonStr {{
"Image": {
"Width":  800,
"Height": 600,
"Title":  "View from 15th Floor",
"Thumbnail": {
"Url":    "http://www.example.com/image/481989943",
"Height": 125,
"Width":  100
},
"Animated" : false,
"IDs": [116, 943, 234, 38793],
"valid-access" : [

]
}
} }
set valid_obj [::json:object? $jsonStr ]
puts "is object $valid_obj n"

В този случай valid_obj е равен на "0". когато поставя "validaccess" вместо "валиден достъп", тя работи добре и мога да анализира обекта json без никакъв проблем.

какво съм пропуснал? има ли някакво специфично отношение, което трябва да направя, за да приемам знака "тире" в името на елемента?

Отговори:

1 за отговор № 1

Не знам коя е командата ::json:object? идва от (може би тук?), но не изглежда да е част от json пакет в Tcllib. Това също е погрешно; обектът JSON е правилен.

Обратно, ако използвам пакета от Tcllib:

package require Tcl 8.6
package require json 1.2
set jsonStr {{
"Image": {
"Width":  800,
"Height": 600,
"Title":  "View from 15th Floor",
"Thumbnail": {
"Url":    "http://www.example.com/image/481989943",
"Height": 125,
"Width":  100
},
"Animated" : false,
"IDs": [116, 943, 234, 38793],
"valid-access" : [

]
}
} }
puts [json::json2dict $jsonStr]

Тогава получавам този изход:

Image {Width 800 Height 600 Title {View from 15th Floor} Thumbnail {Url http://www.example.com/image/481989943 Height 125 Width 100} Animated false IDs {116 943 234 38793} valid-access {}}

което изглежда точно за мен.


Всъщност, гледайки тази Wiki страница показва, че това наистина е мястото, където сте получили кода. Примерът е разпознаваемо подобен.Определянето на този код за вас ще бъде въпрос на промяна [string is wordchar $k] в определението за object? да се [regexp {^[-w]+$} $k], Макар че все още е малко досаден; Клавишите JSON могат законно да съдържат (почти) който и да е характер. Истинските ограничения са поради начина, по който json::select на същата страница работи.

Това е примерният код, а не продуктовия клас.