Loading ...
Sorry, an error occurred while loading the content.

VB implementation.

Expand Messages
  • malcontent123
    I am looking for a VB implementation of the JSON data format. I am talking about VB 6 not .NET preferably in native VB code so I don t have another DLL
    Message 1 of 5 , Nov 18, 2005
    • 0 Attachment
      I am looking for a VB implementation of the JSON data format. I am
      talking about VB 6 not .NET preferably in native VB code so I don't
      have another DLL dependency in my project.

      If anybody knows of one I would very much appreciate hearing about it.

      Thank you very much.
    • MPCM
      I haven t found one in my searches...., But I ve considered writing one or at least starting one as a base point. Since vb doesn t support named arrays, I m
      Message 2 of 5 , Nov 18, 2005
      • 0 Attachment
        I haven't found one in my searches....,

        But I've considered writing one or at least starting one as a base point.
        Since vb doesn't support named arrays, I'm guessing we would use collections
        by default? If there is enough interest, I can probably at least get a
        project started for it and the bulk of it done some weekend.

        Anyone else know of an existing project, or have an interest in one being
        started? (again, vb 6 ... not .net)

        --
        Matt


        [Non-text portions of this message have been removed]
      • Atif Aziz
        I am not aware of any VB6 implementation, but one of the interesting things you can do is use JavaScript directly from within VB6 without having to add any
        Message 3 of 5 , Nov 18, 2005
        • 0 Attachment
          I am not aware of any VB6 implementation, but one of the interesting things you can do is use JavaScript directly from within VB6 without having to add any external dependencies. You also have to bear in mind that due to lack of reflection and dynamic objects in VB6, it will be hard to have a native implementation anyhow. Your best bet would be to go with a dictionary-like object. By hosting JavaScript in VB6, however, you gain a whole bunch of benefits, first of which is that you can directly use the JavaScript JSON implementation from Douglas Crockford or rely on eval (when deserializing) to do the trick. Here's some VB6 code to illustrate my point:

          Sub Main()

          Dim Script: Set Script = CreateObject("MSScriptControl.ScriptControl.1")
          Script.Language = "JavaScript"

          Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
          Script.AddCode FSO.OpenTextFile("json.js").ReadAll()

          Dim Point
          Set Point = Script.CodeObject.JSON.parse("{ ""x"" : 1, ""y"" : 2 }")

          Debug.Print Point.x
          Debug.Print Point.y

          Debug.Print CallByName(Point, "x", VbGet)
          Debug.Print CallByName(Point, "y", VbGet)

          End Sub

          The MS ScriptControl object that is created at the beginning is an automation wrapper for scripting engines that support ActiveX Scripting, which covers JavaScript and VBScript. Note that this does not really add a dependency because the MS ScriptControl has been shipping with Windows since a while now (e.g., msscript.ocx ships and installs with Windows 2000). You should be able to package your application without it. Next, setting the Language property to "JavaScript" causes the control to fetch and host the JavaScript engine. I then assume you have json.js lying around somewhere on disk and load its contents into the scripting engine. At this point, the script is parsed and the JSON is ready to be used. All you need to do to call JavaScript functions is go over the CodeObject property. As you can see above, I get JSON.parse to return a JSON-ified point object with an x and y property. You can access those properties using the normal property-accesor syntax in VB. If case-sensitivity is an issue, as it can be in a case-insensitive language like VB and the IDE that can sometimes change casing behind your back, I suggest using the CallByName function where the exact case of the property you wish to read/write can be specified as a string. I have also shown how to do this above.

          Going the other way is harder, that is getting the JSON format for a VB object is much harder. Again, this is due to the limited way in which a VB object exposes itself to JavaScript since the languages are based on different capabilities. In other words, you won't get the expected results if you simply pass a VB object to JSON.stringify. But perhaps you can use the script control to bridge the gap. In other words, when it comes to JSON, just use JavaScript from VB. Create the objects you want to JSON-ify via JavaScript as script code.

          - Atif


          --- In json@yahoogroups.com, "malcontent123" <malcontent@u...> wrote:
          >
          > I am looking for a VB implementation of the JSON data format. I am
          > talking about VB 6 not .NET preferably in native VB code so I don't
          > have another DLL dependency in my project.
          >
          > If anybody knows of one I would very much appreciate hearing about it.
          >
          > Thank you very much.
          >




          [Non-text portions of this message have been removed]
        • MPCM
          I just tried that on my machine and it threw a lovely warning from Norton about Possible Malicious scripts running (standard error, not something actually
          Message 4 of 5 , Nov 18, 2005
          • 0 Attachment
            I just tried that on my machine and it threw a lovely warning from
            Norton about Possible Malicious scripts running (standard error, not
            something actually malicious). I'm not thinking that this would be a
            viable option if in fact this happens for others as well.

            Although you would not be able to pass native vb objects into a json
            format easily, it still would be very useful to be able to decode json
            into native variable types, and at at least be able to convert viable
            data formats into json.

            I'm sure for most of us, it's meant to make getting data from json
            speaking platforms (usually web based) to our vb apps more easily, and
            sending light messages back.

            Otherwise we are just doing some type of delimiting ourselves anyway,
            so a standard format, even if it doesn't match fully, would still be
            useful. I'll post back sometime next week, as I think I will be able
            to put something together to do this.

            --
            Matt
          • Atif Aziz
            Hi Matt, Ah, yes, I don t have Norton software on my PC so I did not get that warning on my machine when running the code I posted. I can see how this would a
            Message 5 of 5 , Nov 21, 2005
            • 0 Attachment
              Hi Matt,

              Ah, yes, I don't have Norton software on my PC so I did not get that
              warning on my machine when running the code I posted. I can see how this
              would a problem for some, and frankly, it was just to show how you can
              get up and running immediately with JSON in VB6 without investing too
              much time upfront. With proper encapsulation, you could always revisit
              the code and port it to a native implementation once you had the upper
              bits done, but I'm sure you are the better judge of how to approach the
              problem in your case. This could get a little off-topic, but my personal
              belief is that scripting security warnings are completely useless for
              most users and even administrators because they cannot make an informed
              decision about most of those warnings. The responsibility to inform,
              therefore, falls upon the application provider in the shape of README
              files (which are not really read that much anyhow) or making early tests
              at start-up. The latter approach allows one to tell the user or
              administrator that your software requires a particular technology that
              appears to have been blocked. This is happening today with ports and
              pop-ups in browser and so scripting in desktop applications does not
              appear to be an exception.

              >>
              Although you would not be able to pass native vb objects into a json
              format easily, it still would be very useful to be able to decode json
              into native variable types, and at at least be able to convert viable
              data formats into json.
              <<

              I totally agree. I just think that the lack of reflection and expando
              objects make it difficult to have such an implementation in VB6, but not
              impossible. I can imagine that CallByName for dynamic invocation of
              property accessors and TLBINF32.DLL for reflection would be your best
              friends here in a native implementation.

              - Atif

              -----Original Message-----
              From: json@yahoogroups.com [mailto:json@yahoogroups.com] On Behalf Of
              MPCM
              Sent: Friday, November 18, 2005 4:39 PM
              To: json@yahoogroups.com
              Subject: Re: [json] Re: VB implementation.

              I just tried that on my machine and it threw a lovely warning from
              Norton about Possible Malicious scripts running (standard error, not
              something actually malicious). I'm not thinking that this would be a
              viable option if in fact this happens for others as well.

              Although you would not be able to pass native vb objects into a json
              format easily, it still would be very useful to be able to decode json
              into native variable types, and at at least be able to convert viable
              data formats into json.

              I'm sure for most of us, it's meant to make getting data from json
              speaking platforms (usually web based) to our vb apps more easily, and
              sending light messages back.

              Otherwise we are just doing some type of delimiting ourselves anyway,
              so a standard format, even if it doesn't match fully, would still be
              useful. I'll post back sometime next week, as I think I will be able
              to put something together to do this.

              --
              Matt




              Yahoo! Groups Links
            Your message has been successfully submitted and would be delivered to recipients shortly.