cJSON: Формат полей для вложенных структур
Добавлено: 20 Ноябрь 2022, 12:28
Вот такой вариант, удовлетворяет моим хотелкам. Тестировал, правда, на совсем примитивных вводных.
Место общения программистов, форум разработчиков БД на Clarion
https://forum.clarionlife.net/
Код: Выделить всё
jParams &= json::CreateObject(MyDoc,,'{{"name":"Name","ignore":False},{{"name":"*","ignore":true},{{"name":"Field02","IsQueue":True}')
! Выгружает только поля: Name и Field02
Код: Выделить всё
[{"name"="Expired","jsonname":"IsExpired","isbool":true},{"name"="*","isbool":true}]
Код: Выделить всё
!Было:
!testString STRING('{{"name": "Carl", "addresses": [{{"city": "Rivercity","street": "Main st","house": 123},{{"city": "Rivertown","street": "Park st","house": 987}], "phones": ["1234567", "7654321"]}')
!Стало
testString STRING('{{"name": "Carl", "addresses": [{{"city": "Rivercity","street": "Main st","house": 123},{{"city": "Rivertown","street": "Park st","house": 987}], "phonelist":{{"phones": ["1234567", "7654321"]}}')
!Для наглядности:
{
"name": "Carl",
"addresses": [
{
"city": "Rivercity",
"street": "Main st",
"house": 123
},
{
"city": "Rivertown",
"street": "Park st",
"house": 987
}
],
"phonelist": {
"phones": [
"1234567",
"7654321"
]
}
}
Код: Выделить всё
PersonGrp GROUP
Name STRING(20)
Addresses &QUEUE !- reference to AddressQ
Phonelist GROUP
Phones &QUEUE !- reference to PhonesQ
END
END
Код: Выделить всё
MyTest Procedure()
Q_Docs Queue,Type
SignedContent Group
Content String(20)
Signature String(20)
TestFlag Bool
end
end
gMessage Group
Docs &Q_Docs
DocsInstance Long
end
qFile Queue(Q_Docs).
Params &cJson
Code
qFile.SignedContent.Content = 'Текст'; Add(qFile)
gMessage.Docs &= qFile
gMessage.DocsInstance = Instance(gMessage.Docs,Thread())
Params &= json::CreateObject(gMessage,,'[{{"name":"*", "ignore":true},' & |
'{{"name":"Docs", "isQueue":true},' & |
'{{"name":"DocsInstance", "ignore":false},' & | ! Это мона убрать
'{{"name":"SignedContent","ignore":false},' & |
'{{"name":"Content", "ignore":false},' & |
'{{"name":"TestFlag", "isBool":true}]')
Message(Params.ToString(True))
Код: Выделить всё
{
"docs": [
{
"signedcontent": {
"content": "Текст",
"testflag": false
},
"testflag": false ! <--- ??? Откуда взялся этот дубликат ???
}
]
}
Код: Выделить всё
Params &= json::CreateObject(gMessage,,'[{{"name":"Docs","isQueue":true},{{"name":"Signature","ignore":true}]')