използвайки 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
на същата страница работи.
Това е примерният код, а не продуктовия клас.