Jump to content

Recommended Posts

Posted

Im trying to decode a json string using this function:

Func json_decode($sJson)
   $oSC = ObjCreate("ScriptControl")
   $oSC.Language = "JScript"
   $oSC.AddCode("var obj = " & $sJson)
   If IsObj($oSC.Eval("obj")) Then
      Return $oSC.Eval("obj")
   Else
      Return False
   EndIf
EndFunc

So, for exemple, i try to decode this:

$test = '{"oksdd":true,"result":[{"ss":34}, {"sdes":"332"}]}'
$oUpdates = JSON_DECODE($test)

If i read "oksdd" it work:
 

$sText = $oUpdates.oksdd

But when i try to read 

$sText = $oUpdates.result.(0).ss

It fails. Why? How can I read that?

  • Moderators
Posted

Moved to the appropriate forum.

Moderation Team

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Posted

you could get values directly from within javascript using the ScriptControl itself:

Global $oSC = ObjCreate("ScriptControl")
$oSC.Language = "JScript"

$test = '{"oksdd":true,"result":[{"ss":34}, {"sdes":"332"}]}'
$oUpdates = json_decode($test)

ConsoleWrite($oSC.Eval('obj.oksdd') & @CRLF)
ConsoleWrite($oSC.Eval("obj.result[0].ss") & @CRLF)
ConsoleWrite($oSC.Eval("obj.result[1].sdes") & @CRLF)

Func json_decode($sJson)
    $oSC.AddCode("var obj = " & $sJson)
    If IsObj($oSC.Eval("obj")) Then
        Return $oSC.Eval("obj")
    Else
        Return False
    EndIf
EndFunc   ;==>json_decode

or, even better, by enabling a fetching of array items with a custom javascript function, say as example Array.Peek, as shown in this nice example by the good @genius257 (https://www.autoitscript.com/forum/topic/176731-autoit-javascript-roundtrip/?do=findComment&comment=1329179).

here a possible way:

Global $oSC = ObjCreate("ScriptControl")
$oSC.Language = "JScript"

; see here https://www.autoitscript.com/forum/topic/176731-autoit-javascript-roundtrip/?do=findComment&comment=1329179
$oSC.Eval("Array.prototype.Peek = function(i){return this[i];}"); enable fetching of array item with Array.Peek function

$test = '{"oksdd":true,"result":[{"ss":34}, {"sdes":"332"}]}'
$oUpdates = json_decode($test)

ConsoleWrite($oUpdates.oksdd & @CRLF) ; read oksdd

$myArray = $oUpdates.result ; get the 'map'

MsgBox(0,"Debug",  "there are " & $myArray.length & " elements in 'result'" & @CRLF & _
        $myArray.Peek(0).ss & @CRLF & _
        $myArray.Peek(1).sdes)

Func json_decode($sJson)
    $oSC.AddCode("var obj = " & $sJson)
    If IsObj($oSC.Eval("obj")) Then
        Return $oSC.Eval("obj")
    Else
        Return False
    EndIf
EndFunc   ;==>json_decode

 

 

image.jpeg.9f1a974c98e9f77d824b358729b089b0.jpeg Chimp

small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...