www.webdeveloper.com
Results 1 to 5 of 5

Thread: JSON.parse() odd SyntaxError: Unexpected token

  1. #1
    Join Date
    Apr 2014
    Location
    Barcelona, Spain
    Posts
    3

    Question JSON.parse() odd SyntaxError: Unexpected token

    Hi all,

    This is my first post in the group.

    I'm fighting with an exception in JSON.parse() function which is happening in Chrome, Firefox and Safari but not in I.E. I'll explain it with the following examples executed from the Chrome's console:

    > JSON.parse("[{\"field\":\"Is_Shielded\",\"value\":false,\"operator\":\"eq\"}]")
    [Object]

    It works.

    > $.base64Decode($.base64Encode("[{\"field\":\"Is_Shielded\",\"value\":false,\"operator\":\"eq\"}]"))
    "[{"field":"Is_Shielded","value":false,"operator":"eq"}]"


    The result is the same string.

    > JSON.parse($.base64Decode($.base64Encode("[{\"field\":\"Is_Shielded\",\"value\":false,\"operator\":\"eq\"}]")))
    SyntaxError: Unexpected token


    Why?

    Just to remark that parse() function works with the literal string, no matter how I write it:

    > JSON.parse('[{"field":"Is_Shielded","value":false,"operator":"eq"}]')
    [Object]



    As I said, it is only working on I.E.

    $.base64Decode and $.base64Encode are functions of a jQuery pluggin for encoding data in BASE64: https://gist.github.com/TaoK/1602210

    Any idea?

    regards,

    Josť A.

  2. #2
    Join Date
    Mar 2005
    Location
    Behind you...
    Posts
    873
    And now my first question simply has to be... why encode and then instantly decode all in the same line? I guess I'm a bit unclear as to what you are trying to achieve here because if it's simply parsing a JSON string then it seems like you are adding unnecessary (and redundant) steps. Is there a reason for the base64Encode and base64Decode?
    Last edited by jedaisoul; 04-02-2014 at 03:17 AM. Reason: removed reference to duplicate post
    "Given billions of tries, could a spilled bottle of ink ever fall into the words of Shakespeare?"

  3. #3
    Join Date
    Apr 2014
    Location
    Barcelona, Spain
    Posts
    3
    It has no sense, of course. I just simplified the problem in a simple test to easily explain my problem. What I'm doing is encoding an object in a Base64 string and later, in another moment/process getting the encoded string, decoding and parsing the result.

    And the reason of using Base64 encoding is because I'm attaching the encoded string in an URL.
    Last edited by jedaisoul; 04-02-2014 at 03:19 AM. Reason: removed reference to duplicate post

  4. #4
    Join Date
    Mar 2005
    Location
    Behind you...
    Posts
    873
    I just tested in IE7-11 and only found an issue in IE7 ('JSON is undefined', which is a different error and to be expected). Have you viewed the error console in IE prior to getting this error? When I tested IE8 I had to switch the jQuery file/version I was using as an error was being triggered when jquery loaded (and thus later trying to use base64Encode/Decode failed).

    In any case though I was not able to replicate the same error you received in IE8+ or any other modern browser. If changing the jQuery file/version being used (I used 1.11 from Google's hosted libraries) doesn't help then I feel as though the issue lies somewhere else for you. Based on what you've given there are no errors.
    "Given billions of tries, could a spilled bottle of ink ever fall into the words of Shakespeare?"

  5. #5
    Join Date
    Apr 2014
    Location
    Barcelona, Spain
    Posts
    3

    resolved

    Hi guys,

    Finally I could solve the problem. This was I did.

    First, I changed the native JSON object with the JSON3 library (http://bestiejs.github.io/json3/), letting me to debug the parse() function which was giving me the same exception. And I found a NULL (0) character at the end of the decoded string. This was the invalid token.

    Thus I debugged the base64Decode() function to realize it was my fault because I changed some base64 encoding characters to make URL safe the encoded string (+/= into -_*), however I didn't check that during the decode the -, _ and * chars were being stripped.

    So, because the result of encoding [{\"field\":\"Is_Shielded\",\"value\":false,\"operator\":\"eq\"}] has two trailing *

    > $.base64Encode("[{\"field\":\"Is_Shielded\",\"value\":false,\"operator\":\"eq\"}]")
    W3siZmllbGQiOiJJc19TaGllbGRlZCIsInZhbHVlIjpmYWxzZSwib3BlcmF0b3IiOiJlcSJ9XQ**

    The $.base64Decode() was really decoding the string W3siZmllbGQiOiJJc19TaGllbGRlZCIsInZhbHVlIjpmYWxzZSwib3BlcmF0b3IiOiJlcSJ9XQ, giving the "invisible" odd result.

    Thanks all for the attention and Sup3rkirby for your comments. Have a nice day everybody.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles