1

Тема: AHK: Объединение чисел, разбитых в json-строке

{"EnableHighlihtPaidIssues":false,"Years":{"2020":{"03":{"16"},"02":{"24","17","10","03"},"01":{"27","20","13"}},"2019":{"11":{"25","18","11","04"},"10":{"28","21","07"},"09":{"30","23","16","09","02"},"04":{"08","01"},"03":{"25","18"},"02":{"25","18","11","04"},"01":{"28","21","14"}},"2018":{"11":{"26","19","12","05"},"10":{"29","22","15","01"},"09":{"24","17","10","04"},"03":{"27","19"},"02":{"26","19","12","05"},"01":{"29","22","15"}},"2017":{"11":{"27","20","13","06"},"10":{"30","23","16","02"},"09":{"25","18","11","04"},"04":{"03"},"03":{"27","20","13"},"02":{"20","13","06"},"01":{"30","23","16","09"}},"2016":{"04":{"04"},"03":{"21","14"}}}}

Каким образом можно извлечь эти числа в виде дат, в таком формате? —

20200316
20200224
20200217
20200210
20200203
20200127
...

2

Re: AHK: Объединение чисел, разбитых в json-строке

Это не JSON, или пример с ошибками. Массивы в JavaScript — внутри квадратных скобок.
Если не руками его набирали, проверьте источник.

Чтобы интерпретировать JSON в объекты AHK и обратно, используйте эту обёртку.

3

Re: AHK: Объединение чисел, разбитых в json-строке

Тот пример полностью по этой ссылке находится, я из него для наглядности малозначащие фрагменты удалил.

4

Re: AHK: Объединение чисел, разбитых в json-строке

А если не разбирать json, что для меня сложно, каким путём можно сначала двухзначное число перед блоком с фигурными скобками размножить таким образом (точки для наглядности), -

"02":{"02.24","02.17","02.10","02.03"}

а потом уже скопировать четырёхзначные перед предыдущими результатами? —

"2020":{"02":{"2020.02.24","2020.02.17","2020.02.10","2020.02.03"}

5

Re: AHK: Объединение чисел, разбитых в json-строке

Попробуйте так:

url := "https://www.pressreader.com/api/calendar/get?accessToken=R5bgEbsoed6WPYuxL_h8Rv_HwVZMQUHICyktAtvDgnvQ3Bifg-pPShF3PXmPLmH7046LM7s_fzeQccyNrh3aQg!!&cid=9hzn"

Whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
Whr.Open("GET", url, false)
Whr.Send()
status := Whr.status
if (status != 200)
   throw "WinHttpRequest error. Status: " . status

Arr := Whr.responseBody
pData := NumGet(ComObjValue(arr) + 8 + A_PtrSize)
length := arr.MaxIndex() + 1
jsonStr := StrGet(pData, length, "utf-8")

ahkObj := JsonToAHK(jsonStr)
for year, v in ahkObj.Years {
   for month, v in v
      for day in v
         str .= (str ? "`r`n" : "") . year . Format("{:02}{:02}", month, day)
}
MsgBox, % Clipboard := str

JsonToAHK(json, rec := false) {
   static doc := ComObjCreate("htmlfile")
         , __ := doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
         , JS := doc.parentWindow
   if !rec
      obj := %A_ThisFunc%(JS.JSON.parse(json), true)
   else if !IsObject(json)
      obj := json
   else if JS.Object.prototype.toString.call(json) == "[object Array]" {
      obj := []
      Loop % json.length
         obj.Push( %A_ThisFunc%(json[A_Index - 1], true) )
   }
   else {
      obj := {}
      keys := JS.Object.keys(json)
      Loop % keys.length {
         k := keys[A_Index - 1]
         obj[k] := %A_ThisFunc%(json[k], true)
      }
   }
   Return obj
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Объединение чисел, разбитых в json-строке

Вот это да, спасибо!