Giter Site home page Giter Site logo

vba-json's People

Watchers

 avatar

vba-json's Issues

double backslash parse problem

What steps will reproduce the problem?
I create an Test Case:

Sub parse_test7()

    Dim lib As New JSONLib
    Dim json As Object

    Set json = lib.parse("{""Path"":""C:\\sample\\sample.jpg""}")
    Debug.Assert Err.Number = 0

    Debug.Print lib.toString(json)

    Set json = Nothing
    Set lib = Nothing

End Sub

What is the expected output? What do you see instead?
expected:
{"Path":"C:\sample\sample.jpg"}
instead:
{"Path":"C:samplesample.jpg"}

What version of the product are you using? On what operating system?


Please provide any additional information below.

I manual fix by follow:
@@ -149,7 +147,10 @@
             index = index + 1
             char = Mid(str, index, 1)
             Select Case (char)
-            Case """", "\\", "/"
+            Case "\"
+                parseString = parseString & "\"
+                index = index + 1
+            Case """", "/", "'"
                 parseString = parseString & char
                 index = index + 1
             Case "b"

Original issue reported on code.google.com by [email protected] on 13 May 2010 at 6:33

Unable to handle multi-dimensional arrays

What steps will reproduce the problem?
1.  Dim theData(1,1,1)
    theData(0,0,0)=1
    Dim lib As New jsonlib
    Dim jsonStr As String
    jsonStr = lib.toString(theData)
2.
3.

What is the expected output? What do you see instead?
Should see: [[[1,],[,]],[[,],[,]]]
Actually see: [[[,],[,]],[[,],[,]]]


What version of the product are you using? On what operating system?
R2. Windows 7. Excel 2007.

Please provide any additional information below.
The problem occurs in the multiArray function.

As far as I can gather, VBA doesn't allow you to work with an array with an 
unknown number of dimensions (it would need a splat operator).

The following code provides a fudge for up to 10 dimensions (with the unneeded 
old code commented out.

Private Function multiArray(aBD, iBC, sPS, ByRef sPT)   ' Array BoDy, Integer 
BaseCount, String PoSition
    Dim iDU, iDL, i ' Integer DimensionUBound, Integer DimensionLBound
    On Error Resume Next
    iDL = LBound(aBD, iBC)
    iDU = UBound(aBD, iBC)

    Dim sPB1, sPB2, NoDimensions As Long, DimList() As Long ' String PointBuffer1, String PointBuffer2
    If Err.Number = 9 Then
        sPB1 = sPT & sPS
        NoDimensions = Len(sPB1)
        ReDim DimList(1 To NoDimensions)
        For i = 1 To Len(sPB1)
            'If i <> 1 Then sPB2 = sPB2 & ","
            'sPB2 = sPB2 & Mid(sPB1, i, 1)
            DimList(i) = CLng(Mid(sPB1, i, 1))
        Next

'        multiArray = multiArray & toString(Eval("aBD(" & sPB2 & ")"))
'        multiArray = multiArray & toString(aBD(sPB2)) 'This was the original 
line, replaced by DJM by the code Select statement below.
        Select Case NoDimensions
            Case 1
                multiArray = multiArray & toString(aBD(DimList(1)))
            Case 2
                multiArray = multiArray & toString(aBD(DimList(1), DimList(2)))
            Case 3
                multiArray = multiArray & toString(aBD(DimList(1), DimList(2), DimList(3)))
            Case 4
                multiArray = multiArray & toString(aBD(DimList(1), DimList(2), DimList(3), DimList(4)))
            Case 5
                multiArray = multiArray & toString(aBD(DimList(1), DimList(2), DimList(3), DimList(4), DimList(5)))
            Case 6
                multiArray = multiArray & toString(aBD(DimList(1), DimList(2), DimList(3), DimList(4), DimList(5), DimList(6)))
            Case 7
                multiArray = multiArray & toString(aBD(DimList(1), DimList(2), DimList(3), DimList(4), DimList(5), DimList(6), DimList(7)))
            Case 8
                multiArray = multiArray & toString(aBD(DimList(1), DimList(2), DimList(3), DimList(4), DimList(5), DimList(6), DimList(7), DimList(8)))
            Case 9
                multiArray = multiArray & toString(aBD(DimList(1), DimList(2), DimList(3), DimList(4), DimList(5), DimList(6), DimList(7), DimList(8), DimList(9)))
            Case 10
                multiArray = multiArray & toString(aBD(DimList(1), DimList(2), DimList(3), DimList(4), DimList(5), DimList(6), DimList(7), DimList(8), DimList(9), DimList(10)))
            Case Else
                'Not much point in doing anything here. The error would just leave it blank.
        End Select
    Else
        sPT = sPT & sPS
        multiArray = multiArray & "["
        For i = iDL To iDU
            multiArray = multiArray & multiArray(aBD, iBC + 1, i, sPT)
            If i < iDU Then multiArray = multiArray & ","
        Next
        multiArray = multiArray & "]"
        sPT = Left(sPT, iBC - 2)
    End If
    Err.Clear
End Function

Original issue reported on code.google.com by [email protected] on 28 Aug 2012 at 12:14

Bug: Case statement comparing one character "\" to "\\"

What steps will reproduce the problem?
1. parse "text":"\\","row":"12345678"
2.
3.

What is the expected output? What do you see instead?
Expect text \\
get text \",

What version of the product are you using? On what operating system?
current.Excel 2010. Win 7

Please provide any additional information below.
Fix: double backslash in parseString Cannot match a single char

Change
  Case """", "\\", "/"
to
  Case """", "\", "/"

Original issue reported on code.google.com by [email protected] on 14 Oct 2014 at 6:57

Cannot convert a 2-d array to JSON

What steps will reproduce the problem?
1. Create a 2-d array, such as: 
Dim arr(0 to 1, 0 to 1) as String
arr(0, 0) = "a"
arr(0, 1) = "b"
arr(1, 0) = "c"
arr(1, 1) = "d"

2. Try to convert to JSON with 
Debug.Print lib.toString(arr)


What is the expected output? What do you see instead?

I expect [["a", "b"], ["c", "d"]]

but I get a "Type Mismatch" error. If I change the array type to Variant, I
get the following: 

[[,],[,]]

but it returns an error.

What version of the product are you using? On what operating system?
json.xls downloaded on 1/15/2010 from the Google Code Site.

Please provide any additional information below.
Thanks for looking into it! 

Original issue reported on code.google.com by [email protected] on 15 Jan 2010 at 10:59

Enter one-line summary

hi.

i glad for using VB JSON parser.
then, i found loop permanently when a string "key" include a colon. 
so i changed "parseKey()" tentatively. as following:

         Case ":"
            If Not dquote And Not squote Then
               index = index + 1
               Exit Do
            ElseIf dquote And Not squote Then
                parseKey = parseKey & Char
               index = index + 1
            End If


just reported it.

thanks,
yamad

Original issue reported on code.google.com by [email protected] on 5 Sep 2009 at 6:17

String wont parse

Way wont the parser parse the string below ?
It creates the root ListsState but leaves it empty, no sub objects are created.

{"ListsState":{"MenuLocation":["Kelim","ChecklistTools"],"CurentLoadedChecklist"
:"ToolsConfig","InnerDoc":{"DapiotRegel":{"ClassName":"White","CHLTitle":"דפי
ת 
רגל","Fields":{}},"ToolsConfig":{"ClassName":"White","CHLTitle":"משקלים
","Fields":{"ToolsConfigHeliID":"036","ToolsConfigCrewSize":"3","ToolsConfigOper
ativeWgt":"1,500","ToolsConfigNumOf669":"0","ToolsConfigNumOf669Doc":"0","ToolsC
onfigNumOf669Med":"0","ToolsConfigNumOf669Equip":"0","ToolsConfigNumOfSol":"0","
ToolsConfigNumOfPax":"0","ToolsConfigCargo":"0","ToolsConfigCar":"0","ToolsConfi
gFuelExtTanks":"0","ToolsConfigFuelTotal":"0","ToolsConfigCarUnits_Save":"ק\"ג
"}}}}}

Original issue reported on code.google.com by [email protected] on 23 Aug 2010 at 11:15

http: 85

What steps will reproduce the problem?
1.
2.
3.

What is the expected output? What do you see instead?


What version of the product are you using? On what operating system?


Please provide any additional information below.


Original issue reported on code.google.com by [email protected] on 7 Jan 2014 at 8:41

outcome

What steps will reproduce the problem?
no steps, this is a question.

What is the expected output? What do you see instead?
How can i read a parsed JSON string as an array?


Original issue reported on code.google.com by [email protected] on 19 Mar 2009 at 7:59

improve parseNumber() with Long number

What steps will reproduce the problem?
  1. Set json = lib.parse("{"BigNumber":32769}")
  2. an Exception was raise because the CInt Cannot process the Big number 

What is the expected output? What do you see instead?

  Debug.Assert json.Item("BigNumber") = 32769

What version of the product are you using? On what operating system?


Please provide any additional information below.

'I use CLng to replace CInt
Private Function parseNumber(ByRef str As String, ByRef index As Long)

    Dim value   As String
    Dim char    As String

    Call skipChar(str, index)
    Do While index > 0 And index <= Len(str)
        char = Mid(str, index, 1)
        If InStr("+-0123456789.eE", char) Then
            value = value & char
            index = index + 1
        Else
            If InStr(value, ".") Or InStr(value, "e") Or InStr(value, "E") 
Then
                parseNumber = CDbl(value)
            Else
                parseNumber = CLng(value) 'CInt(value)
            End If
            Exit Function
        End If
    Loop


End Function

Original issue reported on code.google.com by [email protected] on 9 May 2010 at 1:34

parseKey with Key containing ":"

What steps will reproduce the problem?
1. parse any JSON with a key containing a ":" (like in google analytics api 
answers)

What is the expected output? What do you see instead?
EXP: normal parsing
GOT: infinity loop

check code beginnning at  this case-statement:
https://code.google.com/p/vba-json/issues/attachmentText?id=15&aid=150001000&nam
e=jsonlib.cls&token#276

I added an else clause to solve this:
        Case ":"
            If Not dquote And Not squote Then
                index = index + 1
                Exit Do
            Else
                If InStr(vbCrLf & vbCr & vbLf & vbTab & " ", char) Then
                Else
                    parseKey = parseKey & char
                End If
                index = index + 1
            End If

(didn't test this in depth - just for my case)

Original issue reported on code.google.com by [email protected] on 30 Sep 2014 at 2:20

improve parseNumber() for other decimal settings

I have added to parseNumber():

            If InStr(value, ".") Or InStr(value, "e") Or InStr(value, "E") Then
                ' for PT Local Settings where decimal is ","
                If CStr(1.2) = "1,2" Then value = Replace(value, ".", ",",
1, -1, 1)
                parseNumber = CDbl(value)
            Else
                parseNumber = CInt(value)

--
Are you planning adding support for JSON-RPC ? That would be nice.

Original issue reported on code.google.com by [email protected] on 12 Jun 2009 at 9:53

parseString bug

I found an issue that crashes the parseString function where data delimited
with a single quote and containing encoded single quotes.  

It causes a freeze. This can be fixed by adding a single quote to the case
statement:

            Select Case (char)
               Case """", "\\", "/", "'"
                  SB.Append char
                  index = index + 1
               Case "b"


Original issue reported on code.google.com by [email protected] on 25 Mar 2009 at 6:13

Unable to parse strings containing colons - Infinite loop

What steps will reproduce the problem?
1. In the parse_test4 subroutine, change any of the ""test"" elems to ""te:st""
2. Run the subroutine

What is the expected output? What do you see instead?
The expected output should be the normal json output from the test. Instead, 
Excel freezes - because it is really good at detecting redundancies so it just 
loops them as fast as possible till windows asks if you want to crash the 
instance and restart.


What version of the product are you using? On what operating system?
The latest version - with Microsoft Office 2007 running on Windows 7

Please provide any additional information below.

Great parser. It's worked really well so far. I'll fix this bug in my instance, 
but I'm not sure if I should add my fix here or not. I'm pretty sure it won't 
be elegant :)

Original issue reported on code.google.com by [email protected] on 2 Jun 2012 at 4:19

here's an update for office 64-bit support

What steps will reproduce the problem?
1. Try to compile and run in 64-bit excel, for example

What is the expected output? What do you see instead?
Attached screenshot shows the error message.

What version of the product are you using? On what operating system?
64-bit office, 64-bit windows 7

Please provide any additional information below.
The attached cStringBuilder.cls has the proper defines to work with 64-bit 
systems.  I couldn't figure out how to check it into svn here.

-joe

Original issue reported on code.google.com by [email protected] on 12 Jan 2011 at 7:37

Attachments:

Redundant vbCrLf

The code lines
1) in skipchar():
While index > 0 And index <= Len(str) And InStr(vbCr & vbLf & vbTab & " ", 
Mid(str, index, 1)) 

and

2) If InStr(vbCrLf & vbCr & vbLf & vbTab & " ", char) Then

The first vbCrLf & 
is redundant as it duplicates vbCr & vbLf
AND char is only one character anyway.

(Thanks for fix to parsenumber btw)

Original issue reported on code.google.com by [email protected] on 28 Mar 2014 at 2:41

Thank you for this code!

I will be testing with example code in the near future, and I'll keep you
posted on how it works.  Thanks!

Original issue reported on code.google.com by [email protected] on 7 Apr 2010 at 3:54

Spaces improperly removed from object keys

What steps will reproduce the problem?
1. use an object key containing a space e.g. "{ ""key with 3 spaces"": 1 }"
2. parse the json
3. key no longer has spaces

What is the expected output? What do you see instead?
JSON object keys should be allowed to have spaces. 

What version of the product are you using? On what operating system?
mac 2011 excel

Please provide any additional information below.

Here is an easy test to illustrate the problem:
1. change the parseKey() func to public
2. run the following test:
Public Sub test()
    Dim s As String, k As String
    Dim j As json
    Set j = New json
    s = """key with spaces"":{""etc..."""
    k = j.parseKey(s, 1)
    Debug.Print "value '" & k & "' should have spaces but does not"
End Sub

This is easily fixed by replacing the parseKey() line below:
            If InStr(vbCrLf & vbCr & vbLf & vbTab & " ", Char) Then
with
            If dquote Or squote Then
                parseKey = parseKey & Char
            ElseIf InStr(vbCrLf & vbCr & vbLf & vbTab & " ", Char) Then

Original issue reported on code.google.com by [email protected] on 15 Aug 2014 at 10:31

dddd

What steps will reproduce the problem?
1. ddd
2. dx
3.

What is the expected output? What do you see instead?


What version of the product are you using? On what operating system?


Please provide any additional information below.


Original issue reported on code.google.com by [email protected] on 9 Dec 2014 at 3:06

Need a new owner

Many of the issues reported have fixes, but they keep getting re-reported 
because all the fixes are in comment attachments. 


This is happening because this project seems to have no owner.

If anyone sees this who has the ability to add project members, please contact 
me. I volunteer to maintain this.

Original issue reported on code.google.com by [email protected] on 14 Oct 2014 at 11:30

Added suport for JSON-RPC 2.0 in jsonlib

Public Function JsonRpcCall(url As String, methName As String, args(),
Optional user As String, Optional pwd As String) As Object
    Dim r As Object, cli As MSXML2.XMLHTTP60
    Dim pText As String
    Static reqId As Integer

    reqId = reqId + 1

    Set r = CreateObject("Scripting.Dictionary")
    r("jsonrpc") = "2.0"
    r("method") = methName
    r("params") = args
    r("id") = reqId

    pText = toString(r)

    ''Set cli = CreateObject("MSXML2.XMLHTTP.6.0")
    Set cli = New MSXML2.XMLHTTP60
    If Len(user) > 0 Then   ' If Not IsMissing(user) Then
        cli.Open "POST", url, False, user, pwd
    Else
        cli.Open "POST", url, False
    End If
    cli.setRequestHeader "Content-Type", "application/json"
    cli.Send pText

    If cli.Status <> 200 Then
        Err.Raise vbObjectError + INVALID_RPC_CALL + cli.Status, ,
cli.statusText
    End If

    Set r = parse(cli.responseText)
    Set cli = Nothing

    If r("id") <> reqId Then Err.Raise vbObjectError + INVALID_RPC_CALL, ,
"Bad Response id"

    If r.Exists("error") Or Not r.Exists("result") Then
        Err.Raise vbObjectError + INVALID_RPC_CALL, , "Json-Rpc Response
error: " & r("error")("message")
    End If

    If Not r.Exists("result") Then Err.Raise vbObjectError +
INVALID_RPC_CALL, , "Bad Response, missing result"

    Set JsonRpcCall = r("result")
End Function



Original issue reported on code.google.com by [email protected] on 16 Jun 2009 at 11:48

cint in parse number is issue (wont deal with big numbers!)

What steps will reproduce the problem?
1. tried to parse a json string with large numbers in
2.
3.

What is the expected output? What do you see instead?
I get an invisible error return, no object produced

What version of the product are you using? On what operating system?


Please provide any additional information below.

There is a cint() in parse number which needs to be a clng() at the very least

Original issue reported on code.google.com by [email protected] on 6 Sep 2014 at 3:44

Incorrect CrLf encoding?

Some data seemed to have double the enters in text every time it was saved,
it seems to be because 

               Case "n"
                  SB.Append vbNewLine
                  index = index + 1

should be:
               Case "n"
                  SB.Append vbLf
                  index = index + 1

in the parseString function.

Original issue reported on code.google.com by [email protected] on 25 Mar 2009 at 6:34

Cannot parse a JSON string containing an array...

What steps will reproduce the problem?
1. Put this string in a variable:

{"total_rows":36778,"offset":26220,"rows":[
{"id":"6b80c0b76","key":"[email protected]","value":{"entryid":"81151F241C2500","subject
":"test subject","senton":"2009-7-09 22:03:43"}},
{"id":"b10ed9bee","key":"[email protected]","value":{"entryid":A7C3CF74EA95C9F","subject
":"test subject2","senton":"2009-4-21 10:18:26"}}]}

2. Instantiate a jsonlib object:  "Dim lib As New jsonlib"
3. Define a new JSON object: "Dim json As Object"
4. Instantiate the JSON object by invoking the jsonlib's "parse" method, the 
JSON string is the  parameter: "Set json = lib.parse(mystring)"

What is the expected output? What do you see instead?
I would expect to be able to access the elements in the json object; the parse 
method returns an error.

What version of the product are you using? On what operating system?
r2 from Feb 14,2009 - OS = Windows XP


Please provide any additional information below.
Parsing JSON strings containing a single record works perfectly, I'm using your 
VBA library to read/write/delete data in CouchDB.


Original issue reported on code.google.com by [email protected] on 18 Oct 2009 at 3:14

parseNumber and regional settings

If you set "," as the decimal point in Control panel / Regional and Language 
settings then CDbl("12.34") will throw an error, but CDbl("12,34") will be 
parsed correctly.

Some language uses comma for decimal point by default, so you can make more 
globalized parseNumber if you replace this:
  parseNumber = CDbl(value)

to this:
  parseNumber = CDbl(Replace(value, ".", Mid(CStr(0.1), 2, 1)))

Original issue reported on code.google.com by [email protected] on 11 Oct 2012 at 12:13

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.