Что нового

как преобразовать json строку в массив и записать в файл?

gideon

Новичок
Сообщения
20
Репутация
0
Всем доброго дня,подскажите как преобразовать строку:
Код:
{"output":[{"id":0,"name":"word"},{"id":5,"name":"word > "@\./,\@""},{"id":4,"name":"word > "4""},{"id":3,"name":"word > «third»"},{"id":2,"name":"word> \второй"},{"id":1,"name":"word > первый"}]}

чтобы значение "name" было первым а после знака "|" значение "id"
пример
Код:
"@\./,\@"|5
word|0
"4"|4
«third»|3
\Второй|2
первый|1

и записать в файл
Заранее благодарен!
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
$vTest = '{"output":[{"id":0,"name":"word"},{"id":5,"name":"word > "@\./,\@""},{"id":4,"name":"word > "4""},{"id":3,"name":"word > «third»"},{"id":2,"name":"word> \второй"},{"id":1,"name":"word > первый"}]}'

$aRet = StringRegExp($vTest, '{"id":(\d+),"name":"(?:word\h*>\h*)?(.*?)"}', 3)
$sIDs = ''

For $i = 0 To UBound($aRet) - 1 Step 2
    $sIDs &= ($sIDs ? @CRLF : '') & $aRet[$i + 1] & '|' & $aRet[$i]
Next

ConsoleWrite($sIDs & @CRLF)
 
Автор
G

gideon

Новичок
Сообщения
20
Репутация
0
Код:
$vTest = '{"output":[{"id":0,"name":"word"},{"id":5,"name":"word > "@\./,\@""},{"id":4,"name":"word > "4""},{"id":3,"name":"word > «third»"},{"id":2,"name":"word> \второй"},{"id":1,"name":"word > первый"}]}'

$aRet = StringRegExp($vTest, '{"id":(\d+),"name":"(?:word\h*>\h*)?(.*?)"}', 3)
$sIDs = ''

For $i = 0 To UBound($aRet) - 1 Step 2
    $sIDs &= ($sIDs ? @CRLF : '') & $aRet[$i + 1] & '|' & $aRet[$i]
Next

ConsoleWrite($sIDs & @CRLF)
Спасибо за ответ,ваш вариант лучше моего)
Код:
#Include "json.au3"
#include <MsgBoxConstants.au3>
Global $Json
$Json = '{"output":[{"id":0,"name":"work"},{"id":4,"name":"work > \"4\""},{"id":3,"name":"work > «third»"},{"id":7,"name":"work > test341"},{"id":2,"name":"work > \\второй\\"},{"id":1,"name":"work > первый"}]}'
If StringRegExp($Json,'work > ') Then
 $Json=StringRegExpReplace($Json,'work > ','')
Else
   EndIf


Local $Obj = Json_Decode($Json)
$myarray = Json_Get($Obj, '["output"]')
$i = 0
For $element IN $myarray
   ConsoleWrite(Json_Get($myarray[$i], '["name"]')&'|')
   ConsoleWrite(Json_Get($myarray[$i], '["id"]') & @LF)
   $i = $i + 1
next
 
Последнее редактирование:
Верх