Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 10.01.2011
Сообщений: 50
1

JSON в XML

05.11.2020, 21:03. Просмотров 585. Ответов 17
Метки нет (Все метки)


Имеется файл JSON:
JSON
1
{"id":151,"name":"Ethereum","tag":"ETH","algorithm":"Ethash","block_time":"13.2171","block_reward":3.38164691934411,"block_reward24":2.47394642108815,"block_reward3":2.43106978730364,"block_reward7":2.47354304799483,"last_block":11198117,"difficulty":3.28474428835378e+15,"difficulty24":3.31921075037543e+15,"difficulty3":3.33020803175734e+15,"difficulty7":3.34908949025559e+15,"nethash":248522314906732,"exchange_rate":0.027506,"exchange_rate24":0.0281083902097902,"exchange_rate3":0.028024746353455,"exchange_rate7":0.0282619981498387,"exchange_rate_vol":14606.69535981,"exchange_rate_curr":"BTC","market_cap":"$46,746,537,523","pool_fee":"0.000000","estimated_rewards":"0.005699","btc_revenue":"0.00015676","revenue":"$2.35","cost":"$1.01","profit":"$1.34","status":"Active","lagging":false,"testing":false,"listed":true,"timestamp":1604591418}
Конвертирую его таким образом:
PowerShell
1
$JsonObject = Get-Content -Path "E:\151.json" | ConvertFrom-Json | ConvertTo-Xml -As Stream -Depth 3 | Out-File -FilePath "E:\151.xml"
Получаю файл XML такого вида:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?xml version="1.0" encoding="utf-8"?>
<Objects>
  <Object Type="System.Management.Automation.PSCustomObject">
    <Property Name="id" Type="System.Int32">151</Property>
    <Property Name="name" Type="System.String">Ethereum</Property>
    <Property Name="tag" Type="System.String">ETH</Property>
    <Property Name="algorithm" Type="System.String">Ethash</Property>
    <Property Name="block_time" Type="System.String">13.1976</Property>
    <Property Name="block_reward" Type="System.Decimal">3,36803885427179</Property>
    <Property Name="block_reward24" Type="System.Decimal">2,4885061027176</Property>
    <Property Name="block_reward3" Type="System.Decimal">2,43649062821275</Property>
    <Property Name="block_reward7" Type="System.Decimal">2,47379219646246</Property>
    <Property Name="last_block" Type="System.Int32">11198314</Property>
    <Property Name="difficulty" Type="System.Double">3,27979191300323E+15</Property>
    <Property Name="difficulty24" Type="System.Double">3,318617524144E+15</Property>
    <Property Name="difficulty3" Type="System.Double">3,33042936760631E+15</Property>
    <Property Name="difficulty7" Type="System.Double">3,34833730193706E+15</Property>
    <Property Name="nethash" Type="System.Int64">248514268730923</Property>
    <Property Name="exchange_rate" Type="System.Decimal">0,027253</Property>
    <Property Name="exchange_rate24" Type="System.Decimal">0,0280801203966006</Property>
    <Property Name="exchange_rate3" Type="System.Decimal">0,028011932341651</Property>
    <Property Name="exchange_rate7" Type="System.Decimal">0,0282536657558909</Property>
    <Property Name="exchange_rate_vol" Type="System.Decimal">13953,23715211</Property>
    <Property Name="exchange_rate_curr" Type="System.String">BTC</Property>
    <Property Name="market_cap" Type="System.String">$47,103,976,168</Property>
    <Property Name="pool_fee" Type="System.String">0.000000</Property>
    <Property Name="estimated_rewards" Type="System.String">0.005734</Property>
    <Property Name="btc_revenue" Type="System.String">0.00015626</Property>
    <Property Name="revenue" Type="System.String">$2.38</Property>
    <Property Name="cost" Type="System.String">$1.01</Property>
    <Property Name="profit" Type="System.String">$1.38</Property>
    <Property Name="status" Type="System.String">Active</Property>
    <Property Name="lagging" Type="System.Boolean">False</Property>
    <Property Name="testing" Type="System.Boolean">False</Property>
    <Property Name="listed" Type="System.Boolean">True</Property>
    <Property Name="timestamp" Type="System.Int32">1604594004</Property>
  </Object>
</Objects>


Но меня это не устраивает, так как нужно получить XML, такого вида:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?xml version="1.0" encoding="UTF-8" ?>
<root>
  <id>151</id>
  <name>Ethereum</name>
  <tag>ETH</tag>
  <algorithm>Ethash</algorithm>
  <block_time>13.2081</block_time>
  <block_reward>3.2819827821987</block_reward>
  <block_reward24>2.49671503172623</block_reward24>
  <block_reward3>2.43922693788229</block_reward3>
  <block_reward7>2.47496490060655</block_reward7>
  <last_block>11198396</last_block>
  <difficulty>3270117645942950</difficulty>
  <difficulty24>3318196120742750</difficulty24>
  <difficulty3>3330288899805890</difficulty3>
  <difficulty7>3348277101451160</difficulty7>
  <nethash>247584258594570</nethash>
  <exchange_rate>0.027232</exchange_rate>
  <exchange_rate24>0.0280687276536313</exchange_rate24>
  <exchange_rate3>0.0280081347606612</exchange_rate3>
  <exchange_rate7>0.028252038221181</exchange_rate7>
  <exchange_rate_vol>13787.27998122</exchange_rate_vol>
  <exchange_rate_curr>BTC</exchange_rate_curr>
  <market_cap>$46,824,068,374</market_cap>
  <pool_fee>0.000000</pool_fee>
  <estimated_rewards>0.005753</estimated_rewards>
  <btc_revenue>0.00015668</btc_revenue>
  <revenue>$2.38</revenue>
  <cost>$1.01</cost>
  <profit>$1.37</profit>
  <status>Active</status>
  <lagging>false</lagging>
  <testing>false</testing>
  <listed>true</listed>
  <timestamp>1604595158</timestamp>
</root>


Как получить вышеописанный код?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.11.2020, 21:03
Ответы с готовыми решениями:

JSON и XML
Здраствуйте. Меня интересует такой вопрос. Какая разница между JSON и XML Заранее спасибо!

Qt JSON or XML
Доброго времени суток. Необходим совет. Есть данные, которые мне необходимо хранить в файле. Если...

из XML в JSON
подскажите как это сделать в XML файле хранится список обьектов

XML или JSON
Имеется приложение, при первом запуске которого создается бд и производится ее заполнение из...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
Записывайтесь на профессиональные курсы DevOps-инженеров
17
3391 / 1412 / 239
Регистрация: 10.12.2013
Сообщений: 4,849
05.11.2020, 21:18 2
Цитата Сообщение от Electra2005 Посмотреть сообщение
Как получить вышеописанный код?
Самому. После ConvertFrom-JSON.
0
0 / 0 / 0
Регистрация: 10.01.2011
Сообщений: 50
05.11.2020, 21:22  [ТС] 3
Каким образом?
0
3391 / 1412 / 239
Регистрация: 10.12.2013
Сообщений: 4,849
05.11.2020, 21:26 4
Ну, ты же сам видишь, как именно он конвертирует по умолчанию.
0
0 / 0 / 0
Регистрация: 10.01.2011
Сообщений: 50
05.11.2020, 21:32  [ТС] 5
Видеть то вижу, но понимания, как решить данную задачу это не дает.
0
3391 / 1412 / 239
Регистрация: 10.12.2013
Сообщений: 4,849
05.11.2020, 21:36 6
та посмотри документацию по об`ектной модели XMLDocument,
всякие там методы CreateNode или CreateElement ( не помню точно ) + SetAttribute итд
0
143 / 67 / 17
Регистрация: 27.02.2016
Сообщений: 299
06.11.2020, 03:24 7
Electra200 здесь две не сложные части первая вытащить простой hashmap из PSCustomObject который выдает convertto-json
- гуглится
- вторая как в цикле сделать добавление ноды и текста в нее

Код
 
[xml]$Doc = new-object System.Xml.XmlDocument
$root = $doc.CreateNode('element', $root_element, $null)
...
 $node = $doc.CreateNode('element',$key,$null)
  $text = $doc.CreateTextNode($value)
  $node.appendChild($text)
  $root.AppendChild($node)
...
$doc.AppendChild($root) | out-null
$doc.save(...
0
357 / 198 / 61
Регистрация: 20.02.2019
Сообщений: 1,134
Записей в блоге: 24
06.11.2020, 10:03 8
я думаю неплохой вариант применить XSLT шаблон и еще раз конвертировать XML to XML

Добавлено через 26 минут
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
param ($xml, $xsl, $output)
 
if (-not $xml -or -not $xsl -or -not $output)
{
    Write-Host "& .\xslt.ps1 [-xml] xml-input [-xsl] xsl-input [-output] transform-output"
    exit;
}
 
trap [Exception]
{
    Write-Host $_.Exception;
}
 
$xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
$xslt.Load($xsl);
$xslt.Transform($xml, $output);
 
Write-Host "generated" $output;
отсюда
1
Любознательный
1749 / 773 / 214
Регистрация: 10.03.2016
Сообщений: 1,801
06.11.2020, 13:59 9
Цитата Сообщение от Electra2005 Посмотреть сообщение
нужно получить XML, такого вида
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function new-xml {
    param (
        $root = "Root",
        #$one = "One",
        $doc = 'doc.xml'
    )
    begin {
        $settings = new-object system.xml.xmlwritersettings
        $settings.indent = $true
        $settings.indentchars = "`t"
        $xml = [xml.xmlwriter]::create($doc, $settings)
        $xml.writestartdocument()
        $xml.writestartelement($root)
    }
    process {
        $arr = ($_|gm -mem noteproperty).name
        #$xml.writestartelement($one)
        foreach ($item in $arr){
            $xml.writeelementstring($item,$_.$item)
        }
        #$xml.writeendelement()
    }
    end {
        $xml.writeendelement() 
        $xml.writeenddocument()
        $xml.flush()
        $xml.close()
    }
 
}
 
$workers = gc test.json|convertfrom-json
$workers|new-xml
0
3391 / 1412 / 239
Регистрация: 10.12.2013
Сообщений: 4,849
06.11.2020, 14:23 10
Неохваченным остался подход к снаряду с LINQ to XML в руках.

https://docs.microsoft.com/en-... chnologies
0
357 / 198 / 61
Регистрация: 20.02.2019
Сообщений: 1,134
Записей в блоге: 24
06.11.2020, 14:29 11
Вот шаблон xslt

XML
1
2
3
4
5
6
7
8
9
10
11
<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
     <xsl:template match="/">
          <Root>
               <xsl:for-each select="//Property">
                    <xsl:element name="{@Name}">
                         <xsl:value-of select="."/>
                    </xsl:element>
               </xsl:for-each>
          </Root>
     </xsl:template>
</xsl:stylesheet>

но применить его к переменным у меня не получилось,
к файлам легко

PowerShell
1
2
3
$xslt = New-Object System.Xml.Xsl.XslCompiledTransform
$xslt.Load("C:\tmp\ss.xsl")
$xslt.Transform('C:\tmp\input.xml', 'C:\tmp\output.xml')
0
0 / 0 / 0
Регистрация: 10.01.2011
Сообщений: 50
06.11.2020, 15:35  [ТС] 12
Господа, все оказалось проще.
Товарищ на Хабре подсказал:
PowerShell
1
$JsonObject = Get-Content -Path "E:\151.json" | ConvertFrom-Json | ConvertTo-Xml -notypeinformation | foreach { $_.Objects.Object.OuterXml -replace '\<Property.+?Name="(.+?)".*?\>(.+?)\</Property\>','<$1>$2</$1>' -replace "<(.)?Object>",'<$1root>'} | Out-File -FilePath "E:\151.xml"
Осталось исправить кодировку на UTF-8, так как данный способ, пишет файл в кодировке UCS-2 LE c BOM
0
3391 / 1412 / 239
Регистрация: 10.12.2013
Сообщений: 4,849
06.11.2020, 15:54 13
Цитата Сообщение от Electra2005 Посмотреть сообщение
все оказалось проще.
и чем же это проще? голыми руками текст править..
0
357 / 198 / 61
Регистрация: 20.02.2019
Сообщений: 1,134
Записей в блоге: 24
06.11.2020, 18:58 14
Electra2005, фи... как вульгарно )))
0
Любознательный
1749 / 773 / 214
Регистрация: 10.03.2016
Сообщений: 1,801
06.11.2020, 19:25 15
На всякого мудреца довольно простоты...
Никогда не думал, что править текст регулярками, как правильно сказали выше "голыми руками", это оказывается проще штатных возможностей языка... хотя, с другой стороны, топор по-любому проще бензопилы...
0
357 / 198 / 61
Регистрация: 20.02.2019
Сообщений: 1,134
Записей в блоге: 24
06.11.2020, 20:11 16
Зачем тогда это все?

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
(@'
{
  "id": 151,
  "name": "Ethereum",
  "tag": "ETH",
  "algorithm": "Ethash",
  "block_time": "13.2171",
  "block_reward": 3.38164691934411,
  "block_reward24": 2.47394642108815,
  "block_reward3": 2.43106978730364,
  "block_reward7": 2.47354304799483,
  "last_block": 11198117,
  "difficulty": 3.28474428835378e+15,
  "difficulty24": 3.31921075037543e+15,
  "difficulty3": 3.33020803175734e+15,
  "difficulty7": 3.34908949025559e+15,
  "nethash": 248522314906732,
  "exchange_rate": 0.027506,
  "exchange_rate24": 0.0281083902097902,
  "exchange_rate3": 0.028024746353455,
  "exchange_rate7": 0.0282619981498387,
  "exchange_rate_vol": 14606.69535981,
  "exchange_rate_curr": "BTC",
  "market_cap": "$46,746,537,523",
  "pool_fee": "0.000000",
  "estimated_rewards": "0.005699",
  "btc_revenue": "0.00015676",
  "revenue": "$2.35",
  "cost": "$1.01",
  "profit": "$1.34",
  "status": "Active",
  "lagging": false,
  "testing": false,
  "listed": true,
  "timestamp": 1604591418
}
'@ -split '\r\n' | Select-String -Pattern "\s{2}(.*):([^,]*),?").Matches | % {'<?xml version="1.0" encoding="UTF-8" ?>'; '<root>'} {
    "`t<$($_.Groups[1].value -replace '"')>$($_.Groups[2].value.Trim() -replace '"')</$($_.Groups[1].value -replace '"')>"} {'</root>'}
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?xml version="1.0" encoding="UTF-8" ?>
<root>
    <id>151</id>
    <name>Ethereum</name>
    <tag>ETH</tag>
    <algorithm>Ethash</algorithm>
    <block_time>13.2171</block_time>
    <block_reward>3.38164691934411</block_reward>
    <block_reward24>2.47394642108815</block_reward24>
    <block_reward3>2.43106978730364</block_reward3>
    <block_reward7>2.47354304799483</block_reward7>
    <last_block>11198117</last_block>
    <difficulty>3.28474428835378e+15</difficulty>
    <difficulty24>3.31921075037543e+15</difficulty24>
    <difficulty3>3.33020803175734e+15</difficulty3>
    <difficulty7>3.34908949025559e+15</difficulty7>
    <nethash>248522314906732</nethash>
    <exchange_rate>0.027506</exchange_rate>
    <exchange_rate24>0.0281083902097902</exchange_rate24>
    <exchange_rate3>0.028024746353455</exchange_rate3>
    <exchange_rate7>0.0282619981498387</exchange_rate7>
    <exchange_rate_vol>14606.69535981</exchange_rate_vol>
    <exchange_rate_curr>BTC</exchange_rate_curr>
    <market_cap>$46</market_cap>
    <pool_fee>0.000000</pool_fee>
    <estimated_rewards>0.005699</estimated_rewards>
    <btc_revenue>0.00015676</btc_revenue>
    <revenue>$2.35</revenue>
    <cost>$1.01</cost>
    <profit>$1.34</profit>
    <status>Active</status>
    <lagging>false</lagging>
    <testing>false</testing>
    <listed>true</listed>
    <timestamp>1604591418</timestamp>
</root>
0
3391 / 1412 / 239
Регистрация: 10.12.2013
Сообщений: 4,849
06.11.2020, 20:31 17
alhaos,
не факт, что JSON разбит построчно.
Может и одна длинная строка.

даже если и разбит, не факт, что \r\n, а не просто \n.

Добавлено через 5 минут
Иными словами, отказываться от готового штатного JSON-конвертора - глупо.
0
357 / 198 / 61
Регистрация: 20.02.2019
Сообщений: 1,134
Записей в блоге: 24
06.11.2020, 20:46 18
Цитата Сообщение от volodin661 Посмотреть сообщение
не факт, что JSON разбит построчно.
Может и одна длинная строка.
даже если и разбит, не факт, что \r\n, а не просто \n.
Достаточно только сделать допущение, что мы делаем "Частный случай" и все заходит на ура, как всегда до того момента, пока не надо что то поменять или что-то не поменялось ввиду обстоятельств.

Добавлено через 33 секунды
ну или не надо это решение применить где то еще
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2020, 20:46

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Создание XML и JSON
Подскажие пожалуйста что в контроллере прописать чтоб при вводе /controler/metod?type=xml...

JSON и XML парсинг
Всем привет, снова решил ромучить форучан своими сложными вопросами, на которые почему-то здесь...

Конвертер xml в json
Нужно написать конвертер файла xml в json. Часть кода xml: &lt;keyword id=&quot;read_restart&quot;...

Конвертация XML в JSON и обратно
Есть ли в Qt стандартные средства конвертации форматов друг в друга?

Реализовать конвертер XML-JSON
В общем, такое задание: Реализовать конвертер XML-JSON, JSON-XML Исходный файл XML: ...

Как перевести из json в xml
Здравствуйте уважаемые форумчане. Столкнулся с проблемой перевода из json массива в xml. Возможно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.