Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

JSON Response and request in VB6 application

Posted on 2016-09-28
11
Medium Priority
?
2,609 Views
Last Modified: 2016-10-12
I am working with a VB6 application. I need to send an HTTP request and the receive JSON response. I then need to deserialize the response. I have done this already in VB.NET web application.

I am wondering if it is possible in VB6 application. If yes, can you please advise? Thanks!
0
Comment
Question by:Angel02
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 3
11 Comments
 
LVL 52

Accepted Solution

by:
Gustav Brock earned 2000 total points
ID: 41821258
That should be possible. I made a pure VBA solution using collections to handle the Json response. All code is for download here:

VBA.CVRAPI

It is for a very specific purpose, probably not relevant for you, but the crucial generic parts are kept in the modules named Json. Also, study the demo module for ideas how to implement the generic tools.

/gustav
0
 
LVL 35

Expert Comment

by:ste5an
ID: 41821279
What Kind of HTTP request? Good Web API's offer different result formats, e.g. XML.
0
 

Author Comment

by:Angel02
ID: 41822588
Thank you Gustav. Your code worked perfectly.
Now I am trying to read data from the response into a recordset as needed by my application.

Is it possible to assign data from DataCollection to  a ADODB recordset?

@ste5an
I am currently making GET requests. I later also need to make POST requests.

I used the following in Gustav's code

Set XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "GET", ServiceUrl, Async
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 52

Expert Comment

by:Gustav Brock
ID: 41822951
Is it possible to assign data from DataCollection to  a ADODB recordset?

Certainly. You would loop the collection holding the response and, item by item, add a record to your recordset reading the fields of the collection.

/gustav
0
 
LVL 35

Expert Comment

by:ste5an
ID: 41823085
It's not about GET or POST.

Normally you can specify your result type by using the appropriate accept header. Either accept: application/xml or accept: application/json.
0
 

Author Comment

by:Angel02
ID: 41825843
@stef5n Sorry. Get it now. Gustav's code is working good for responses. I would now like to know about sending requests.

@Gustav
Change of plan. I am now sending the jSon response to a table in SQL server. I got that to work.

I do want to know if your code has a way of sending a json request too. Below is a sample request that I need to send.

{
    "securityID": "65gfggw",
    "productId": 3452,
    "quantity": "5"
   }
0
 
LVL 52

Expert Comment

by:Gustav Brock
ID: 41825884
Sorry, no. As you may have seen, the code just sends a URL with appended parameters, that's all. So there are no efforts to encode data as Json and post these.

I'm sure the Json modules could be expanded to cover this, but I just haven't had the need and, currently, I have no time for working with it, though it could be fun.

/gustav
0
 
LVL 52

Expert Comment

by:Gustav Brock
ID: 41825890
Well, I located this code here which seems to do exactly what you are after:
    Dim objHTTP As Object
    Dim Json As String
    Json = Range("A15") 'here I am pulling in an existing json string to test it. String is created in other VBA code

    Dim result As String

    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    URl = "http://myApi/iSendJsonto/"
    objHTTP.Open "POST", URl, False

   objHTTP.setRequestHeader "Content-type", "application/json"
   objHTTP.send (Json)
   result = objHTTP.responseText

   'Some simple debugging
   Range("A25").Value = result
   Range("A26").Value = Json

   Set objHTTP = Nothing

Open in new window

It uses late binding which you could replace with early binding as in my function RetrieveDataResponse and, of course, you will have to replace the use of ranges to collect the response with variables or collections as to your need.

/gustav
0
 
LVL 35

Expert Comment

by:ste5an
ID: 41826172
I never said, that Gustav's approach is not working or incorrect. I just added a comment, that you maybe don't need to work with XML. Cause good REST services offer multiple answer formats.
0
 

Author Comment

by:Angel02
ID: 41840207
@ste5fan I agree
@gustav thank you!
0

Featured Post

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This code takes an Excel list of URL’s and adds a header titled “URL List”. It then searches through all URL’s in column “A”, looking for duplicates. When a duplicate is found, it is moved to the top of the list. The duplicate URL’s are then highlig…
Explore the ways to Unlock VBA Project Password Excel 2010 & 2013 documents. Go through the article and perform the steps carefully to remove VBA Excel .xls file.
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…
Suggested Courses

598 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question