Здравствуйте!
Есть ли возможность конвертации данных из формата json в формат xml по средствам пакета delphi?
Этот топик читают: Гость
Ответов: 39
Рейтинг: 0
|
|||
карма: 0 |
|
Ответов: 2059
Рейтинг: 132
|
|||
MBO
Есть ли возможность конвертации данных из формата json в формат xml по средствам пакета delphi? Просто сделать схему не получится. Надо IC писать. https://webdelphi.ru/2020/05/rabota-s-json-v-lazarus-free-pascal/ https://wiki.freepascal.org/fcl-json По образу и подобию https://disk.yandex.ru/d/aWfidUdSPMAqfA или https://disk.yandex.ru/d/xDc3zYaSuWuLSw https://disk.yandex.ru/d/w3ULO3uaAEbJiw Редактировалось 5 раз(а), последний 2021-05-17 16:38:24 |
|||
карма: 6 |
|
Ответов: 775
Рейтинг: 168
|
|||
MBO, выложи свой json файл или дай ссылку на него. А то опять "на кошках тренироваться".
|
|||
карма: 15 |
|
Ответов: 39
Рейтинг: 0
|
|||
Gunta писал(а): MBO, выложи свой json файл или дай ссылку на него. А то опять "на кошках тренироваться".Вот приблизительный (сюда залить не смог) Но в будущем он может быть больше, или меньше! Спасибо за помощь) https://mega.nz/file/TUsG1YjT#cS4YwQXKORlxkJCNbdbJT2h_ZC6IC-8zdOJCzEoP7To |
|||
карма: 0 |
|
Ответов: 775
Рейтинг: 168
|
|||
MBO, попробуй этот пример. Будут вопросы, задавай.
https://forum.hiasm.com/getfile/39241 Редактировалось 1 раз(а), последний 2021-05-17 22:42:33 |
|||
карма: 15 |
| ||
файлы: 1 | json to xml.zip [20.1KB] [326] |
Ответов: 537
Рейтинг: 14
|
|||
MBO писал(а): Есть ли возможность конвертации данных из формата json в формат xmlА спарсить данные с json и записать в формат xml нельзя? Это ведь достаточно просто. Раньше так делал, но это ведь конечно нужно долго руками и головой работать. xml форматы бывают разные, универсального способа не существует, есть xml только для определенного сайта и только для него. Нужно взять готовый, правильный xml файл, изучить его, посмотреть между какими тегами данные записываются, брать FormatStr и составлять правильный xml формат по образцу который у вас должен быть. Должна быть инструкция по созданию правильного xml файла для сайта. Еще раз, они разные всегда для каждого сайта. В свое время попотел над такой задачей, правда там был просто ексель файл, а из него нужно было сделать xml Редактировалось 2 раз(а), последний 2021-05-17 23:36:28 |
|||
карма: 4 |
|
Ответов: 775
Рейтинг: 168
|
|||
MBO, так, наверное, будет правильнее.
Редактировалось 1 раз(а), последний 2021-05-18 08:29:46 |
|||
карма: 15 |
|
Ответов: 39
Рейтинг: 0
|
|||
Gunta писал(а): MBO, так, наверное, будет правильнее.
Add(MainForm,15175452,147,84) { link(onCreate,457631:doExecute,[]) } Add(WinExec,11401622,308,84) { FileName="powershell" Mode=0 Action="runas" Point(doConsoleExec) Point(onConsoleResult) Point(onConsoleError) Point(onConsoleTerminate) link(onConsoleTerminate,15175452:doClose,[(347,118)(347,139)(137,139)(137,111)]) } Add(FormatStr,4794102,252,98) { Mask="$data = get-content '%1' -raw\r\n$json = convertfrom-json -inputobject $data\r\n[xml]$xml = convertto-xml -depth 100 $json -notypeinformation\r\n$result = '<?xml version='"'1.0'"' encoding='"'UTF-8'"'?>\n<root>'\r\n$result+= $xml.SelectNodes('//Property')% { '\n\t<{0}>{1}</{0}>' -f $_.name,$_.'#text' }\r\n$result+='\n</root>'\r\n$result | set-content test.xml -Encoding unicod" link(onFString,11401622:doConsoleExec,[]) link(Str2,15318373:Value,[]) } Add(ODialog,457631,196,98) { link(onExecute,4794102:doString,[]) } Add(Memory,15318373,259,42) { Default=String(test.xml) } схему немного откорректировал. Спасибо! А есть способ делать это быстрее и выдавать результат в поток? |
|||
карма: 0 |
|
Ответов: 775
Рейтинг: 168
|
|||
MBO, прицепил Newtonsoft.Json.dll (ссылка на документацию в схеме).
архив со схемой и dll - https://forum.hiasm.com/getfile/39242 MBO писал(а): А есть способ делать это быстрее и выдавать результат в поток?Да, НО, твой файл (json.txt) принят явно не в той кодировке и внутри есть куча ??? вместо кавычек и других символов. В таком виде с ним нужно разбираться вручную. Редактировалось 1 раз(а), последний 2021-05-21 08:17:40 |
|||
карма: 15 |
|
Ответов: 39
Рейтинг: 0
|
|||
Gunta писал(а): MBO, прицепил Newtonsoft.Json.dll (ссылка на документацию в схеме).
архив со схемой и dll - https://forum.hiasm.com/getfile/39242 MBO писал(а): А есть способ делать это быстрее и выдавать результат в поток? Да, НО, твой файл (json.txt) принят явно не в той кодировке и внутри есть куча ??? вместо кавычек и других символов. В таком виде с ним нужно разбираться вручную. Редактировалось 1 раз(а), последний 2021-05-21 08:17:40 Понял, спасибо А можно тогда пример нормального Json и способа его быстрой обработки (если можно, с выведением в поток) |
|||
карма: 0 |
|
Ответов: 775
Рейтинг: 168
|
|||
MBO, не очень понял что ты имеешь в виду под
MBO писал(а): выведением в потокЭто?
Редактировалось 2 раз(а), последний 2021-05-25 18:10:06 |
|||
карма: 15 |
|
Ответов: 39
Рейтинг: 0
|
|||
Gunta писал(а): MBO, не очень понял что ты имеешь в виду под
MBO писал(а): выведением в поток Это? Add(MainForm,3416008,133,182) { link(onCreate,9364295:doDownload,[]) } Add(VisualStrings,11141527,189,133) { Lines=#42:https://www.cbr-xml-daily.ru/daily_json.js Width=214 Height=25 } Add(HTTP_Get,9364295,189,196) { link(onDownload,8204234:doConvert,[]) link(URL,11141527:Text,[]) } Add(StreamConvertor,8204234,245,203) { Mode=6 link(onResult,9221840:doCharset,[]) } Add(WinExec,11401622,546,189) { FileName="powershell" Mode=0 Action="runas" Point(doConsoleExec) Point(onConsoleResult) Point(onConsoleError) Point(onConsoleTerminate) Point(onErrorExec) link(onConsoleResult,5246825:doCharset,[]) } Add(Charset,5246825,616,203) { link(onCharset,4977782:doAdd,[]) } Add(Charset,9221840,301,203) { Type=7 link(onCharset,9999278:doReplace,[]) } Add(Memo,4977782,672,203) { Width=384 Height=261 Align=5 ScrollBars=3 } Add(FormatStr,9433227,490,203) { DataCount=1 Mask="$data = @'\r\n%1\r\n'@ \r\n$json = convertfrom-json -inputobject $data\r\n[xml]$xml = convertto-xml -depth 100 $json -notypeinformation\r\n$xml.OuterXml" link(onFString,11401622:doConsoleExec,[]) } Add(Replace,9999278,350,203) { SubStr=""" DestStr="'" link(onReplace,9433227:doString,[]) } Редактировалось 2 раз(а), последний 2021-05-25 18:10:06 Ну что-то вроди) Так а как же ускорить обработку такого JSon? а то даже относительно не большие файлы символов в 200 обрабатывает около 5-10 сек! |
|||
карма: 0 |
|
Ответов: 39
Рейтинг: 0
|
|||
Решил делать все-таки через Newtonsoft.Json.dll
Получилась такая схема
|
|||
карма: 0 |
|
Ответов: 775
Рейтинг: 168
|
|||
MBO писал(а): Подскажите, пожалуйста, есть ли более правильный способ выводить информацию в поток, без этого бубна с файлами?ссылка на архив со схемой - https://forum.hiasm.com/getfile/39243 Время обработки около 600 миллисекунд. Или, без всего лишнего (только не забудь рядом со схемой Newtonsoft.Json.dll положить)
|
|||
карма: 15 |
|
Ответов: 39
Рейтинг: 0
|
|||
Gunta писал(а): MBO писал(а):
Подскажите, пожалуйста, есть ли более правильный способ выводить информацию в поток, без этого бубна с файлами? ссылка на архив со схемой - https://forum.hiasm.com/getfile/39243 Время обработки около 600 миллисекунд. Или, без всего лишнего (только не забудь рядом со схемой Newtonsoft.Json.dll положить) Add(MainForm,10944027,154,168) { link(onCreate,9999278:doReplace,[]) } Add(Charset,5246825,329,182) { link(onCharset,3806717:doReplace,[]) } Add(Memo,4977782,434,182) { Width=384 Height=261 Align=5 ScrollBars=3 } Add(MultiElementEx,9845988,266,182) { link(XML,5246825:doCharset,[]) } BEGIN_SDK Add(EditMultiEx,14497425,21,21) { WorkCount=#4:JSON EventCount=#3:XML| DataCount=#5:json1| VOffset=98 HOffset=98 link(JSON,14997909:doString,[]) } Add(Icon,12540853,266,175) { @Hint=#5:#main| Icon=[ZIPFE01000078DAD590310E803008453F8907E02FA6AB9BA3F79F7A1C6F811FDAE8E46C043EBC424AD202266FCD95179C06AC0076A9498794FD378B08846AEF1D5F1A0923699E3818623DCAC19C27283635CD990935707F9893EB3C6B0EFCE17937BDFE2D99F47BFF88DAF60BBB00C53E0BBB] } Add(WinExec,6274490,175,105) { FileName="powershell" Mode=0 Action="runas" Point(doConsoleExec) Point(onConsoleResult) Point(onConsoleError) link(onConsoleResult,9111216:doWork2,[]) link(onConsoleError,9111216:doWork3,[(228,132)]) } Add(FormatStr,14997909,119,119) { DataCount=1 Mask="Add-Type -Path '.\Newtonsoft.Json.dll'\r\n$json = @'\r\n%1\r\n'@ \r\n[xml]$xml = [Newtonsoft.Json.JsonConvert]:eserializeXNode($json, 'Root')\r\n$xml.OuterXml\r\n" link(onFString,6274490:doConsoleExec,[]) link(Str1,14497425:json1,[]) } Add(HubEx,9111216,224,119) { link(onEvent,14497425:XML,[]) } END_SDK Add(Replace,3806717,385,182) { SubStr="><" DestStr=">\r\n<" link(onReplace,4977782:doAdd,[]) } Add(StrList,10279787,217,126) { Strings=#1:{|40: "Date": "2021-05-27T11:30:00+03:00",|48: "PreviousDate": "2021-05-26T11:30:00+03:00",|84: "PreviousURL": "\/\/www.cbr-xml-daily.ru\/archive\/2021\/05\/26\/daily_json.js",|45: "Timestamp": "2021-05-26T21:00:00+03:00",|15: "Valute": {|16: "AUD": {|27: "ID": "R01010",|29: "NumCode": "036",|30: "CharCode": "AUD",|25: "Nominal": 1,|43: "Name": "Австралийский доллар",|29: "Value": 57.1846,|31: "Previous": 56.9775|10: },|16: "AZN": {|28: "ID": "R01020A",|29: "NumCode": "944",|30: "CharCode": "AZN",|25: "Nominal": 1,|44: "Name": "Азербайджанский манат",|29: "Value": 43.2453,|31: "Previous": 43.1997|10: },|16: "GBP": {|27: "ID": "R01035",|29: "NumCode": "826",|30: "CharCode": "GBP",|25: "Nominal": 1,|63: "Name": "Фунт стерлингов Соединенного королевства",|30: "Value": 103.9506,|32: "Previous": 104.0466|10: },|16: "AMD": {|27: "ID": "R01060",|29: "NumCode": "051",|30: "CharCode": "AMD",|27: "Nominal": 100,|39: "Name": "Армянских драмов",|29: "Value": 14.1146,|31: "Previous": 14.0989|10: },|16: "BYN": {|28: "ID": "R01090B",|29: "NumCode": "933",|30: "CharCode": "BYN",|25: "Nominal": 1,|40: "Name": "Белорусский рубль",|29: "Value": 29.3168,|31: "Previous": 29.3023|10: },|16: "BGN": {|27: "ID": "R01100",|29: "NumCode": "975",|30: "CharCode": "BGN",|25: "Nominal": 1,|37: "Name": "Болгарский лев",|29: "Value": 46.0016,|31: "Previous": 45.9761|10: },|16: "BRL": {|27: "ID": "R01115",|29: "NumCode": "986",|30: "CharCode": "BRL",|25: "Nominal": 1,|39: "Name": "Бразильский реал",|29: "Value": 13.7795,|31: "Previous": 13.7953|10: },|16: "HUF": {|27: "ID": "R01135",|29: "NumCode": "348",|30: "CharCode": "HUF",|27: "Nominal": 100,|42: "Name": "Венгерских форинтов",|29: "Value": 25.7333,|31: "Previous": 25.8133|10: },|16: "HKD": {|27: "ID": "R01200",|29: "NumCode": "344",|30: "CharCode": "HKD",|26: "Nominal": 10,|43: "Name": "Гонконгских долларов",|29: "Value": 94.6521,|31: "Previous": 94.5548|10: },|16: "DKK": {|27: "ID": "R01215",|29: "NumCode": "208",|30: "CharCode": "DKK",|25: "Nominal": 1,|36: "Name": "Датская крона",|29: "Value": 12.0984,|31: "Previous": 12.0932|10: },|16: "USD": {|27: "ID": "R01235",|29: "NumCode": "840",|30: "CharCode": "USD",|25: "Nominal": 1,|33: "Name": "Доллар США",|29: "Value": 73.4737,|31: "Previous": 73.3963|10: },|16: "EUR": {|27: "ID": "R01239",|29: "NumCode": "978",|30: "CharCode": "EUR",|25: "Nominal": 1,|27: "Name": "Евро",|29: "Value": 89.9392,|31: "Previous": 89.9545|10: },|16: "INR": {|27: "ID": "R01270",|29: "NumCode": "356",|30: "CharCode": "INR",|26: "Nominal": 10,|38: "Name": "Индийских рупий",|29: "Value": 10.1089,|31: "Previous": 10.0775|10: },|16: "KZT": {|27: "ID": "R01335",|29: "NumCode": "398",|30: "CharCode": "KZT",|27: "Nominal": 100,|42: "Name": "Казахстанских тенге",|29: "Value": 17.1746,|31: "Previous": 17.1967|10: },|16: "CAD": {|27: "ID": "R01350",|29: "NumCode": "124",|30: "CharCode": "CAD",|25: "Nominal": 1,|39: "Name": "Канадский доллар",|29: "Value": 60.8427,|31: "Previous": 60.9199|10: },|16: "KGS": {|27: "ID": "R01370",|29: "NumCode": "417",|30: "CharCode": "KGS",|27: "Nominal": 100,|39: "Name": "Киргизских сомов",|29: "Value": 88.2262,|31: "Previous": 87.7379|10: },|16: "CNY": {|27: "ID": "R01375",|29: "NumCode": "156",|30: "CharCode": "CNY",|25: "Nominal": 1,|37: "Name": "Китайский юань",|29: "Value": 11.4882,|30: "Previous": 11.453|10: },|16: "MDL": {|27: "ID": "R01500",|29: "NumCode": "498",|30: "CharCode": "MDL",|26: "Nominal": 10,|38: "Name": "Молдавских леев",|29: "Value": 41.7583,|31: "Previous": 41.5843|10: },|16: "NOK": {|27: "ID": "R01535",|29: "NumCode": "578",|30: "CharCode": "NOK",|26: "Nominal": 10,|38: "Name": "Норвежских крон",|29: "Value": 88.3427,|31: "Previous": 88.3526|10: },|16: "PLN": {|27: "ID": "R01565",|29: "NumCode": "985",|30: "CharCode": "PLN",|25: "Nominal": 1,|38: "Name": "Польский злотый",|29: "Value": 20.0485,|31: "Previous": 20.0662|10: },|16: "RON": {|28: "ID": "R01585F",|29: "NumCode": "946",|30: "CharCode": "RON",|25: "Nominal": 1,|36: "Name": "Румынский лей",|29: "Value": 18.2684,|31: "Previous": 18.2587|10: },|16: "XDR": {|27: "ID": "R01589",|29: "NumCode": "960",|30: "CharCode": "XDR",|25: "Nominal": 1,|60: "Name": "СДР (специальные права заимствования)",|30: "Value": 106.2496,|31: "Previous": 105.971|10: },|16: "SGD": {|27: "ID": "R01625",|29: "NumCode": "702",|30: "CharCode": "SGD",|25: "Nominal": 1,|42: "Name": "Сингапурский доллар",|29: "Value": 55.5315,|31: "Previous": 55.3266|10: },|16: "TJS": {|27: "ID": "R01670",|29: "NumCode": "972",|30: "CharCode": "TJS",|26: "Nominal": 10,|40: "Name": "Таджикских сомони",|29: "Value": 64.4224,|31: "Previous": 64.3545|10: },|16: "TRY": {|28: "ID": "R01700J",|29: "NumCode": "949",|30: "CharCode": "TRY",|26: "Nominal": 10,|35: "Name": "Турецких лир",|29: "Value": 86.9769,|31: "Previous": 87.2415|10: },|16: "TMT": {|28: "ID": "R01710A",|29: "NumCode": "934",|30: "CharCode": "TMT",|25: "Nominal": 1,|46: "Name": "Новый туркменский манат",|29: "Value": 21.0225,|31: "Previous": 21.0004|10: },|16: "UZS": {|27: "ID": "R01717",|29: "NumCode": "860",|30: "CharCode": "UZS",|29: "Nominal": 10000,|38: "Name": "Узбекских сумов",|29: "Value": 69.3047,|30: "Previous": 69.384|10: },|16: "UAH": {|27: "ID": "R01720",|29: "NumCode": "980",|30: "CharCode": "UAH",|26: "Nominal": 10,|40: "Name": "Украинских гривен",|29: "Value": 26.6655,|31: "Previous": 26.7408|10: },|16: "CZK": {|27: "ID": "R01760",|29: "NumCode": "203",|30: "CharCode": "CZK",|26: "Nominal": 10,|35: "Name": "Чешских крон",|29: "Value": 35.3052,|31: "Previous": 35.3751|10: },|16: "SEK": {|27: "ID": "R01770",|29: "NumCode": "752",|30: "CharCode": "SEK",|26: "Nominal": 10,|36: "Name": "Шведских крон",|28: "Value": 88.656,|31: "Previous": 88.8693|10: },|16: "CHF": {|27: "ID": "R01775",|29: "NumCode": "756",|30: "CharCode": "CHF",|25: "Nominal": 1,|40: "Name": "Швейцарский франк",|29: "Value": 82.0752,|31: "Previous": 82.0621|10: },|16: "ZAR": {|27: "ID": "R01810",|29: "NumCode": "710",|30: "CharCode": "ZAR",|26: "Nominal": 10,|45: "Name": "Южноафриканских рэндов",|29: "Value": 53.1113,|31: "Previous": 52.9864|10: },|16: "KRW": {|27: "ID": "R01815",|29: "NumCode": "410",|30: "CharCode": "KRW",|28: "Nominal": 1000,|43: "Name": "Вон Республики Корея",|29: "Value": 65.7786,|31: "Previous": 65.3754|10: },|16: "JPY": {|27: "ID": "R01820",|29: "NumCode": "392",|30: "CharCode": "JPY",|27: "Nominal": 100,|35: "Name": "Японских иен",|29: "Value": 67.5031,|31: "Previous": 67.4877|9: }|5: }|1:}| } Add(Replace,9999278,217,182) { SubStr=""" DestStr="'" link(onReplace,9845988:JSON,[]) link(Str,10279787:Text,[]) } |Спасибо, большое! |
|||
карма: 0 |
|
15