#json #dictionary #tcl
#json #словарь #tcl
Вопрос:
Мне интересно, есть ли более эффективный способ получить значение ‘id’ 7777777 в паре с ключом ввода. Я использую пакет Tcllib json.
package require json
set json {
{
"resourceType": "Bundle",
"id": "11111111-22222-3cc3-4444-d5d555dd5555",
"type": "searchset",
"total": 1,
"link": [
{
"relation": "self",
"url": "https://selfurl.com/a54"
}
],
"entry": [
{
"fullUrl": "https://test.sandboxtest.com/e2/1a11aaa1-22bb-3333-4444dd-e5e5ee55ee55/Patient/lastname=test",
"resource": {
"resourceType": "Patient",
"id": "7777777",
"meta": {
"versionId": "5",
"lastUpdated": "2020-10-08T18:26:31.000Z"
}
}
}
]
}
}
set jsDict [json::json2dict $json]
set entryVal [dict get $jsDict entry]
if {[regexp {Patient id ([^ ] )} $entryVal match idVal]} {
puts $idVal
}
Ответ №1:
Вы должны использовать операции со списком для массивов JSON. Итак, что-то вроде этого:
puts [dict get [lindex [dict get $jsDict entry] 0] resource id]
В качестве альтернативы вы можете извлечь данные $json
непосредственно из rl_json:
puts [rl_json::json get $json entry 0 resource id]
Комментарии:
1.
rl_json
Пакет настоятельно рекомендуется. Он очень хорошо работает даже с большими документами JSON и разработан для быстрой работы. Единственным недостатком, и то только в некоторых средах, является то, что оно написано на C, а не на чистом Tcl. Это не является препятствием для большинства развертываний, но иногда у кого-то есть странные правила для такого рода вещей.