Что нового

Записать из JSON в массив

tamirlan1

Новичок
Сообщения
8
Репутация
0
Добрый день господа гуру и гурчанки.
по ссылке получаю такого ввида задание. -
Код:
[[16, "SPIGE", "126268"], [18, "MIB_", "127787"], [19, "SP2CE", "159330"], [20, "BYREZ", "58132"], [21, "ORN", "3564"]]

[[16, "SPIGE", "126268"], [18, "MIB_", "127787"], [19, "SP2CE", "159330"], [20, "BYREZ", "58132"], [21, "ORN", "3564"]]
необходимо запихнуть в массив размером 3 столбца 24 строки.
условие: [16, "SPIGE", "126268"] - 16 - в 15ую строку второй стобец записать значение SPIGE и т д
Не серчайте если тему не правильно оформил. первый раз =)
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
tamirlan1
Обработать данные сходу имеется возможность? Доступ по индексам к результату Eval будет очень некрасивым, так что рекомендую остановиться на следующем:

Код:
Local $sJson, $oEval
; ---
$sJson = '[[16, "SPIGE", "126268"], [18, "MIB_", "127787"], [19, "SP2CE", "159330"], [20, "BYREZ", "58132"], [21, "ORN", "3564"]]'
$oEval = __jsonLoad($sJson)
If Not @Error Then
	; $oEval.length

	For $oA1 In $oEval
		For $Value In $oA1
			ConsoleWrite($Value & @CRLF)
		Next
	Next
EndIf


Func __jsonLoad($sJson)
	Local $oRes, $oSC = ObjCreate('ScriptControl')
    If Not IsObj($oSC) Then _
		Return SetError(1, 0, 0)
	; *
	$oSC.Language = 'JavaScript'
	; ---
    $sJson = StringRegExpReplace($sJson, '[\r\n]+', ' ')
    $sJson = StringReplace($sJson, "'", "\'")
    $oRes = $oSC.Eval('(' & $sJson & ')')
    If Not IsObj($oRes) Then  _
		Return SetError(2, 0, 0)
	; ---
    Return $oRes
EndFunc
 
Автор
T

tamirlan1

Новичок
Сообщения
8
Репутация
0
форум не дает вставить ссылку. данные подтягию с сайта. задача посторить массив $aRes[23][2].
например: [16, "SPIGE", "126268"] 16 - это метка, значит записать SPIGE записать в ячейку $aRes[15][1], 126268 - записать в ячейку [15][2]
[18, "MIB_", "127787"] - это метка, значит записать MIB_ записать в ячейку $aRes[17][1], 127787- записать в ячейку [17][2] и т д
 
A

Alofa

Гость
Код:
#include <Array.au3>

Local $sText = '[[16, "SPIGE", "126268"], [0, "MIB_", "127787"], [19, "SP2CE", "159330"], [24, "BYREZ", "58132"], [21, "ORN", "3564"]]'
Local $aArray[24][3]

$asText = StringRegExp($sText, '(\w+?)[^\w]', 3)
If Mod(UBound($asText), 3) Then MsgBox(4096 + 16, 'Ошибка', 'Неправильная строка.')

For $i = 0 To UBound($asText) - 1 Step 3
	$Data = ((Not Number($asText[$i])) ? 1 : $asText[$i]) - 1
;~ 	$aArray[$Data][0] = $asText[$i]
	$aArray[$Data][1] = $asText[$i + 1]
	$aArray[$Data][2] = $asText[$i + 2]
Next

_ArrayDisplay($aArray)
 
Автор
T

tamirlan1

Новичок
Сообщения
8
Репутация
0
Alofa сказал(а):
Код:
#include <Array.au3>

Local $sText = '[[16, "SPIGE", "126268"], [0, "MIB_", "127787"], [19, "SP2CE", "159330"], [24, "BYREZ", "58132"], [21, "ORN", "3564"]]'
Local $aArray[24][3]

$asText = StringRegExp($sText, '(\w+?)[^\w]', 3)
If Mod(UBound($asText), 3) Then MsgBox(4096 + 16, 'Ошибка', 'Неправильная строка.')

For $i = 0 To UBound($asText) - 1 Step 3
	$Data = ((Not Number($asText[$i])) ? 1 : $asText[$i]) - 1
;~ 	$aArray[$Data][0] = $asText[$i]
	$aArray[$Data][1] = $asText[$i + 1]
	$aArray[$Data][2] = $asText[$i + 2]
Next

_ArrayDisplay($aArray)

:laugh: низкий поклон! то что доктор прописал!
 
Верх