JSON: Unterminated String Literal Error

Posted March 2, 2007 at 7:21 AM

Tags: ColdFusion, Javascript / DHTML, AJAX

I was just fooling around with some JSON (JavaScript Object Notation) and kept this error whenever I tried to return a string value that contained line breaks:

"unterminated string literal"

I know what the error was (especially as FireFox's FireBug kicks sooo much butt with AJAX), but I couldn't understand how to get around it. Is it possible that JSON values cannot have line breaks? Then it hit me! Javascript line breaks are represented by the "\n" character, NOT an actual line break. Therefore, values such as:

"Libby was this really cute
trainer that I used to work
with."

... should actually be:

"Libby was this really cute\ntrainer that I used to work\nwith."

I was able to update my ColdFusion to JSON algorithm, specifically my StringToJSON() UDF to escape all the special characters:

 Launch code in new window » Download code as text file »

  • <!--- Return a string object. --->
  • <cfreturn (
  • """" &
  • ToString( ARGUMENTS.Data ).ReplaceAll(
  • "(['""\\\/\n\r\t]{1})",
  • "\\$1"
  • ) &
  • """"
  • ) />

Now, it works just fine. This AJAX and JSON stuff is very cool and much more fun once you get a better idea of how it is all working.

Download Code Snippet ZIP File

Post Comment  |  Ask Ben  |  Permalink  |  Other Searches  |  Print Page




Learning ColdFusion 9 - ColdFusion 9 tutorials, samples, examples, demos

Reader Comments

Mar 2, 2007 at 8:27 AM // reply »
33 Comments

Hey Ben, I don't know if you've ever seen it or care for it, but there's a ColdFusion implementation of JSON called CFJSON that I'm now maintaining. You can see it at http://www.epiphantastic.com/cfjson/ . I'm actually planning to release an update today, I may actually have to include the fix you found for your own library!


Mar 2, 2007 at 9:02 AM // reply »
95 Comments

Yup, this a common workaround for almost any web app that contains text with line breaks. Thanks for posting your little code snippet.


Mar 2, 2007 at 9:23 AM // reply »
6,371 Comments

@Thomas,

I like what you have done. I don't quite translate everything the same way. For instance, my CF Query object becomes a simple array of objects; it does not keep the column-first style that CF does. I also don't pass record count and stuff.

But, I do like what you have done. I have some ideas that might help improve it (or maybe not - I am mostly new to AJAX stuff). I would like to clean up what I have and send it to you for review. I will shoot you an email or something later this weekend or next week.


Mar 2, 2007 at 10:08 AM // reply »
33 Comments

@Ben,

I saw the same need as you to have a query as an array instead of a structure, and there's actually an argument that can be passed to make it return it as an array. Not well documented, I admit...

I was about to release a new version, but after reading your post I did a few tests with special characters and ran into one problem when there were double quotes in a string. I just tracked down the problem and found a fix, but I'm a bit puzzled as to why CF is behaving as it is. I'll try to send you an email when I have a sec later to describe the problem, maybe you'll have a clue as to why things are so.


Edward A Savage Jr
Mar 2, 2007 at 4:30 PM // reply »
2 Comments

Why aren't you using the standard 'jsStringFormat()' function?


Mar 2, 2007 at 5:59 PM // reply »
6,371 Comments

@Ed,

JSStringFormat() just escapes certain characters. JSON is much more complex. It converts entire ColdFusion objects to Javascript, not just strings.


Mar 2, 2007 at 7:52 PM // reply »
33 Comments

Hey Ben, if you downloaded CFJSON earlier today, I recommend that you download the latest version that I just put up. There were some serious bugs that were fixed. And if you have any suggestions I'd love to hear them.


Edward A Savage Jr
Mar 2, 2007 at 9:01 PM // reply »
2 Comments

"JSStringFormat() just escapes certain characters."

That's exactly what I was referring to. You were getting errors because of carriage returns/line feeds. jsStringFormat() converts those to '\n'. If you use that function on string values, you don't have to roll your own regular expression. Thomas Messier's CFJSON component uses the jsStringFormat() function.


Mar 3, 2007 at 6:33 AM // reply »
9 Comments

This information at last that has returned me on the necessary way :)


Mar 3, 2007 at 9:39 AM // reply »
6,371 Comments

@Ed,

I apologize. You were completely right about JSStringFormat(). I was not familiar with this function and I see now what you are saying. I am going to implement this. Thanks for the tip.


Josh Allmann
Apr 16, 2007 at 1:19 PM // reply »
1 Comments

Very helpful, even to those of us not using ColdFusion. Thanks! That 'invalid label' solution also saved me a lot of headache earlier. Props.


Apr 16, 2007 at 1:20 PM // reply »
6,371 Comments

Heck yeah! It's all about people helping people :)


brian
Apr 20, 2009 at 12:59 AM // reply »
1 Comments

any idea how to fix 'unterminated string literal' as I try to pass the value of some html tags into javascript function?


Apr 21, 2009 at 9:29 AM // reply »
6,371 Comments

@Brian,

You are not giving us anything to work with.


Andre R
Aug 3, 2009 at 11:50 PM // reply »
1 Comments

I dont know anything about none of this stuff, but every time I go to tagged or something, it say the same error that everybody is talking about here... Does anybody mind explaining this stuff to me because its beginning to become a true pain the the rectum... lol...


Aug 5, 2009 at 8:49 AM // reply »
6,371 Comments

@Andre,

What do you mean "go to tagged"? What are you doing when you get this error?


Post Comment  |  Ask Ben

Recent Blog Comments
Andrew Neely
Nov 7, 2009 at 4:56 PM
A Moment That Touched Me - The Fountainhead
Ben, Glad you enjoyed the podcast. Yeah, the Tank Riot guys can get really chatty during the episodes, but that's part of the charm of it for me. They've covered everything from Nichola Tesla to Cha ... read »
Nov 7, 2009 at 4:43 PM
Building A Fixed-Position Bottom Menu Bar (ala FaceBook)
Is it possible to make some more MenĂ¼`s ? ... read »
Jill
Nov 7, 2009 at 11:40 AM
How To Unformat Your Code (Like A Pro)
Derek, I think you might be right - sweet! Thanks for the link :) ... read »
Nov 7, 2009 at 11:25 AM
How To Unformat Your Code (Like A Pro)
I think it would be way easier to just use this http://www.logichammer.com/html-formatter/ He just released v3 and it rocks. ... read »
Jill
Nov 7, 2009 at 7:58 AM
How To Unformat Your Code (Like A Pro)
LMAO - this was pretty funny! I have to admit - I also love to reformat code so I can read it. My boss used to tell me to leave my OCD at home. Now I don't feel so bad after reading everyone else' ... read »
Nov 6, 2009 at 10:10 PM
How To Unformat Your Code (Like A Pro)
The timing of this post is just uncanny. I spent the last 15-20 minutes manually un-formatting my "Ben Nadel" style code within a CFC of mine. I was really digging the readability a few weeks ago, bu ... read »
Roe
Nov 6, 2009 at 5:11 PM
Passing Arrays By Reference In ColdFusion - SWEEET!
ArraySort also reorders the results of these java obj's ... read »
Nov 6, 2009 at 4:53 PM
How To Unformat Your Code (Like A Pro)
I tried to go *back* the other way. Adding formatting is actually a much more complicated problem than removing formatting. Anyway, here is what I could put together with a minimal amount of time: ... read »