Найти - Пользователи
Полная версия: Прошу помочь! Получить данные из JSON-массива...
Начало » Центр помощи » Прошу помочь! Получить данные из JSON-массива...
1 2
AAT666
Всем привет!

Увы, я не пайтонист… Но в своем микро-проекте столкнулся с проблемой парсинга данных.

Не очень уверен, но, вроде, это все-таки Python… Данные для построения графика.
Если с датами (ось X) разобрался, то с осью Y - данные по величине уровня рек, беда…
Раньше сайт http://gis.vodinfo.ru/ выкладывал таблицы и все отлично парсилось. Но вчера они почему-то убрали эту функцию… Остался только график.

Так, собственно, вопрос - можно вот из такой строки получить данные ?!

 "y":{"__ndarray__":"8xnMZzDPdEDKayivocx0QGcxncV0ZnRAEtxHcB8NdEBl0PinSbpzQGdmZmZmbnNAmpmZmZkZc0B4d3d3d8dyQO/u7u7uenJAmpmZmZkxckCJiIiIiOhxQDMzMzMzo3FARERERERgcUBVVVVVVSFxQFFeQ3kNwXBAGv80yaBhcEDnywGWbSZwQDAHWLb5DnBAvbu7u7vzb0BnZmZmZoZvQGVmZmZmHm9AMzMzMzPDbkBFRERERHRuQBERERERMW5AAAAAAADwbUDv7u7u7q5tQHh3d3d3b21AEBERERExbUCD+wjuI7BsQHV8bYtPV2xAe4JzkVUNbEA=","dtype":"float64","shape":[31]}

Тут должно быть 31 целое число. 3-ехзначное. Положительное.

Если кто что подскажет - огромное чистосердечное мерси!

С уважением, Андрей (г.Тюмень)
py.user.next
Используй тег code для точной передачи JSON-данных на форуме
[code]
здесь пиши JSON
[/code]
PEHDOM
AAT666
Тут должно быть 31 целое число. 3-ехзначное. Положительное.
они точно должны быть целыми?
"dtype":"float64","shape":[31]
кагбе намекает что нифга они не целые.
И можете хотябы приблизительно написать какие там должны быть числа? хотябы паяток первых чтобы?
Из наличия ndarray, dtype и shape в жсоне, можно предположить что это нужно скармливать numpy, но наверное могут быть варианты.
AAT666
Спасибо большое! Сейчас попробую…

Вот из source html:

 "x":[1629244800000.0,1629331200000.0,1629417600000.0,1629504000000.0,1629590400000.0,1629676800000.0,1629763200000.0,1629849600000.0,1629936000000.0,1630022400000.0,1630108800000.0,1630195200000.0,1630281600000.0,1630368000000.0,1630454400000.0,1630540800000.0,1630627200000.0,1630713600000.0,1630800000000.0,1630886400000.0,1630972800000.0,1631059200000.0,1631145600000.0,1631232000000.0,1631318400000.0,1631404800000.0,1631491200000.0,1631577600000.0,1631664000000.0,1631750400000.0,1631836800000.0],"y":{"__ndarray__":"AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8=","dtype":"float64","shape":[31]}},
"x":[1629244800000.0,1629331200000.0,1629417600000.0,1629504000000.0,1629590400000.0,1629676800000.0,1629763200000.0,1629849600000.0,1629936000000.0,1630022400000.0,1630108800000.0,1630195200000.0,1630281600000.0,1630368000000.0,1630454400000.0,1630540800000.0,1630627200000.0,1630713600000.0,1630800000000.0,1630886400000.0,1630972800000.0,1631059200000.0,1631145600000.0,1631232000000.0,1631318400000.0,1631404800000.0,1631491200000.0,1631577600000.0,1631664000000.0,1631750400000.0,1631836800000.0],"y":{"__ndarray__":"aC+hvYRWbkAT2ktoLwFuQDuK6yiuw21AfQT3EdynbUCvobyG8tptQDGdxXQWE25AUV5DeQ1lbkBjOovpLKZuQA3lNZTX0G5AXUN5DeUVb0AT3EdwH4FvQBLcR3AfAXBA3EdwH8EtcEDNZDaT2SxwQH0E9xHcJ3BAO4vpLKZDcEC5jeQ2kmtwQFFeQ3kNhXBA01lMZzF9cECZzmI6i3lwQLiP4D6Ci3BAUV5DeQ2VcEAS3EdwH6FwQHUW01lMt3BAlzj1e261cEBL0cPeqPBwQLb5coBlF3FAW0ltJbUlcUAxn8F8ButwQPcvvqHacHBApdR0NLVrcEA=","dtype":"float64","shape":[31]}}

А сам график в прикрепленном файле. Там верхний - средний график по всем годам и, да там есть дробная часть. А нижний - текущего года, там точно - только целые числа!
PEHDOM
AAT666
. А нижний - текущего года, там точно - только целые числа!
вы очевидно не понимаете разницу между числом и типом числа, число может быть целое, но его тип float. Судя по вашему графику у вас по одной оси вообще идут даты…
может както так:
 s='8xnMZzDPdEDKayivocx0QGcxncV0ZnRAEtxHcB8NdEBl0PinSbpzQGdmZmZmbnNAmpmZmZkZc0B4d3d3d8dyQO/u7u7uenJAmpmZmZkxckCJiIiIiOhxQDMzMzMzo3FARERERERgcUBVVVVVVSFxQFFeQ3kNwXBAGv80yaBhcEDnywGWbSZwQDAHWLb5DnBAvbu7u7vzb0BnZmZmZoZvQGVmZmZmHm9AMzMzMzPDbkBFRERERHRuQBERERERMW5AAAAAAADwbUDv7u7u7q5tQHh3d3d3b21AEBERERExbUCD+wjuI7BsQHV8bYtPV2xAe4JzkVUNbEA='
data = (base64.b64decode(s))
a = np.frombuffer(data, dtype=np.float64)
print(a)
>>>
[332.94931774 332.78947368 326.40350877 320.82017544 315.64298246
 310.9        305.6        300.46666667 295.68333333 291.1
 286.53333333 282.2        278.01666667 274.08333333 268.06578947
 262.10175439 258.40175439 256.93596491 255.61666667 252.2
 248.95       246.1        243.63333333 241.53333333 239.5
 237.46666667 235.48333333 233.53333333 229.50438596 226.72846004
 224.41669533]
но куда эти числа воткнуть в вашем графике ума не приложу.
AAT666
Да не… Разницу я понимаю.
Насчет даты я разобрался - это UNIX формат, в msec (от 01/01/1970)
В PowerShell это сделать просто.
 [datetimeoffset]::FromUnixTimeMilliseconds(1629244800000.0).DateTime
18 августа 2021 г. 0:00:00

А вот со вторым массивом, собственно, самими величинами уровня воды - не получается.

А Вы не могли бы, используя те же функции, применить для второго примера ?.. А то я уже забыл, откуда брал данные из первого примера.
PEHDOM
результат для второго примера, вот это “aC+hvYRWbkAT2ktoLwFuQDuK6yiuw21AfQT3EdynbUCvobyG8tptQDGdxXQWE25AUV5DeQ1lbkBjOovpLKZuQA3lNZTX0G5AXUN5DeUVb0AT3EdwH4FvQBLcR3AfAXBA3EdwH8EtcEDNZDaT2SxwQH0E9xHcJ3BAO4vpLKZDcEC5jeQ2kmtwQFFeQ3kNhXBA01lMZzF9cECZzmI6i3lwQLiP4D6Ci3BAUV5DeQ2VcEAS3EdwH6FwQHUW01lMt3BAlzj1e261cEBL0cPeqPBwQLb5coBlF3FAW0ltJbUlcUAxn8F8ButwQPcvvqHacHBApdR0NLVrcEA=” разворачиваетсяв :

[242.7037037  240.03703704 238.11500975 237.24561404 238.84210526
240.59649123 243.15789474 245.19298246 246.52631579 248.68421053
252.03508772 256.07017544 258.85964912 258.80311891 258.49122807
260.22807018 262.72319688 264.31578947 263.8245614 263.59649123
264.71929825 265.31578947 266.07017544 267.45614035 267.33947368
271.04122807 273.4622807 274.35672515 270.68908382 263.05337691
262.73173948]
AAT666
Ок! Мерси! Похоже, они, все-таки добавляют какую-то “соль” к данным…

К счастью, владельцы поправили что-то и теперь есть страничка с таблицей! )))

Огромная благодарность за помощь!

ЗЫ: Если как-то можно пояснить… вот эта функция что делает ??

 base64.b64decode(s)

Это стандартный base64 в Unicode ? Или в Пайтоне что-то изменяется ?
PEHDOM
AAT666
Похоже, они, все-таки добавляют какую-то “соль” к данным…
необязательно, может мы неправильно их декодируем, Мы то не знаеи что должно получиться в итоге, я просто предположил что данные были закодированы с помощью Base64, это обычная практика, но там могло быть и чтото другое.
AAT666
вот эта функция что делает ??
Декодирует данные из текстовго вида в двоичный.
Кодирование Base64 широко используется в случаях, когда требуется перекодировать двоичные данные для передачи по каналу приспособленному для передачи текстовых данных. Это делается с целью защиты двоичных данных от возможных повреждений при передаче. Вот мы его и вернули обратно в двоичный, но если там вместо Base64 чтото другое использовалдолсь тогда мы его неправильно декодируем, и соотвевено получаем не то что нам нужно.
AAT666
Не-не! Мы знаем что должно получиться - график же показывает данные.

Вот другие данные (там 2 набора - один как среднее за все года, другой - за текущий год). Где какой не понятно только…

 "x":[1629331200000.0,1629417600000.0,1629504000000.0,1629590400000.0,1629676800000.0,1629763200000.0,1629849600000.0,1629936000000.0,1630022400000.0,1630108800000.0,1630195200000.0,1630281600000.0,1630368000000.0,1630454400000.0,1630540800000.0,1630627200000.0,1630713600000.0,1630800000000.0,1630886400000.0,1630972800000.0,1631059200000.0,1631145600000.0,1631232000000.0,1631318400000.0,1631404800000.0,1631491200000.0,1631577600000.0,1631664000000.0,1631750400000.0,1631836800000.0,1631923200000.0],"y":{"__ndarray__":"AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8=","dtype":"float64","shape":[31]}}
"x":[1629331200000.0,1629417600000.0,1629504000000.0,1629590400000.0,1629676800000.0,1629763200000.0,1629849600000.0,1629936000000.0,1630022400000.0,1630108800000.0,1630195200000.0,1630281600000.0,1630368000000.0,1630454400000.0,1630540800000.0,1630627200000.0,1630713600000.0,1630800000000.0,1630886400000.0,1630972800000.0,1631059200000.0,1631145600000.0,1631232000000.0,1631318400000.0,1631404800000.0,1631491200000.0,1631577600000.0,1631664000000.0,1631750400000.0,1631836800000.0,1631923200000.0],"y":{"__ndarray__":"AAAAAACAWkAAAAAAAEBaQAAAAAAAAFpAAAAAAAAAWkAAAAAAAABaQAAAAAAAgFpAAAAAAACAWkAAAAAAAIBaQAAAAAAAQFtAAAAAAACAW0AAAAAAAABbQAAAAAAAwFpAAAAAAABAWkAAAAAAAABaQAAAAAAAAFpAAAAAAADAWUAAAAAAAMBZQAAAAAAAgFlAAAAAAACAWUAAAAAAAEBZQAAAAAAAAFlAAAAAAAAAWUAAAAAAAABZQAAAAAAAwFlAAAAAAABAWUAAAAAAAMBaQAAAAAAAwFpAAAAAAAAAWkAAAAAAAMBZQAAAAAAAwFlAAAAAAAAA+H8=","dtype":"float64","shape":[31]}}

А вот что показывают графики (все 31 значения не стал переписывать, но если надо - перепишу!):

 240.04, 238.12, 237.25, 238.84, 240.6, 243.16, 245.19, 246.53, 248.68, 252.04
106, 105, 104, 104, 104, 106, 106, 106, 109, 110
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB