Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 17, 2021 10:19:37

AAT666
Зарегистрирован: 2021-09-17
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помочь! Получить данные из JSON-массива...

Всем привет!

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

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

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

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

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

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

С уважением, Андрей (г.Тюмень)

Отредактировано AAT666 (Сен. 17, 2021 10:53:27)

Офлайн

#2 Сен. 17, 2021 10:50:27

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Прошу помочь! Получить данные из JSON-массива...

Используй тег code для точной передачи JSON-данных на форуме

[code]
здесь пиши JSON
[/code]



Отредактировано py.user.next (Сен. 17, 2021 10:50:46)

Офлайн

#3 Сен. 17, 2021 14:41:05

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Прошу помочь! Получить данные из JSON-массива...

AAT666
Тут должно быть 31 целое число. 3-ехзначное. Положительное.
они точно должны быть целыми?
"dtype":"float64","shape":[31]
кагбе намекает что нифга они не целые.
И можете хотябы приблизительно написать какие там должны быть числа? хотябы паяток первых чтобы?
Из наличия ndarray, dtype и shape в жсоне, можно предположить что это нужно скармливать numpy, но наверное могут быть варианты.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Сен. 17, 2021 14:56:18)

Офлайн

#4 Сен. 17, 2021 15:01:53

AAT666
Зарегистрирован: 2021-09-17
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помочь! Получить данные из JSON-массива...

Спасибо большое! Сейчас попробую…

Вот из 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]}}

А сам график в прикрепленном файле. Там верхний - средний график по всем годам и, да там есть дробная часть. А нижний - текущего года, там точно - только целые числа!

Прикреплённый файлы:
attachment gis3.jpg (229,8 KБ)

Офлайн

#5 Сен. 17, 2021 17:17:43

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Прошу помочь! Получить данные из JSON-массива...

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]
но куда эти числа воткнуть в вашем графике ума не приложу.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Сен. 17, 2021 17:23:16)

Офлайн

#6 Сен. 17, 2021 18:17:05

AAT666
Зарегистрирован: 2021-09-17
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помочь! Получить данные из JSON-массива...

Да не… Разницу я понимаю.
Насчет даты я разобрался - это UNIX формат, в msec (от 01/01/1970)
В PowerShell это сделать просто.

 [datetimeoffset]::FromUnixTimeMilliseconds(1629244800000.0).DateTime
18 августа 2021 г. 0:00:00

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

А Вы не могли бы, используя те же функции, применить для второго примера ?.. А то я уже забыл, откуда брал данные из первого примера.

Офлайн

#7 Сен. 17, 2021 20:13:18

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Прошу помочь! Получить данные из JSON-массива...

результат для второго примера, вот это “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]



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#8 Сен. 17, 2021 21:37:43

AAT666
Зарегистрирован: 2021-09-17
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помочь! Получить данные из JSON-массива...

Ок! Мерси! Похоже, они, все-таки добавляют какую-то “соль” к данным…

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

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

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

 base64.b64decode(s)

Это стандартный base64 в Unicode ? Или в Пайтоне что-то изменяется ?

Офлайн

#9 Сен. 18, 2021 13:22:09

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Прошу помочь! Получить данные из JSON-массива...

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



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#10 Сен. 18, 2021 14:56:03

AAT666
Зарегистрирован: 2021-09-17
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помочь! Получить данные из JSON-массива...

Не-не! Мы знаем что должно получиться - график же показывает данные.

Вот другие данные (там 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

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version