Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to escape special characters in building a JSON string?

Tags:

json

Here is my string

{     'user': {         'name': 'abc',         'fx': {             'message': {                 'color': 'red'             },             'user': {                 'color': 'blue'             }         }     },     'timestamp': '2013-10-04T08: 10: 41+0100',     'message': 'I'mABC..',     'nanotime': '19993363098581330' }     

Here the message contains single quotation mark, which is same as the quotation used in JSON. What I do is fill up a string from user inputs such as message. So, I need to escape those kind of special scenarios which breaks the code. But other than string replace, is there any way to make them escape but still allow HTML to process them back to the correct message?

like image 352
dinesh707 Avatar asked Oct 04 '13 07:10

dinesh707


People also ask

How do I escape a string in JSON?

The only difference between Java strings and Json strings is that in Json, forward-slash (/) is escaped.

How do you escape the special character?

To search for a special character that has a special function in the query syntax, you must escape the special character by adding a backslash before it, for example: To search for the string "where?", escape the question mark as follows: "where\?"

How do you escape a character in JSON Java?

The simplest approach is to replace quotes with the appropriate escape sequence: String payload = "{\"message\":\"" + message.


1 Answers

I'm appalled by the presence of highly-upvoted misinformation on such a highly-viewed question about a basic topic.

JSON strings cannot be quoted with single quotes. The various versions of the spec (the original by Douglas Crockford, the ECMA version, and the IETF version) all state that strings must be quoted with double quotes. This is not a theoretical issue, nor a matter of opinion as the accepted answer currently suggests; any JSON parser in the real world will error out if you try to have it parse a single-quoted string.

Crockford's and ECMA's version even display the definition of a string using a pretty picture, which should make the point unambiguously clear:

Image showing the definition of a string from the JSON spec

The pretty picture also lists all of the legitimate escape sequences within a JSON string:

  • \"
  • \\
  • \/
  • \b
  • \f
  • \n
  • \r
  • \t
  • \u followed by four-hex-digits

Note that, contrary to the nonsense in some other answers here, \' is never a valid escape sequence in a JSON string. It doesn't need to be, because JSON strings are always double-quoted.

Finally, you shouldn't normally have to think about escaping characters yourself when programatically generating JSON (though of course you will when manually editing, say, a JSON-based config file). Instead, form the data structure you want to encode using whatever native map, array, string, number, boolean, and null types your language has, and then encode it to JSON with a JSON-encoding function. Such a function is probably built into whatever language you're using, like JavaScript's JSON.stringify, PHP's json_encode, or Python's json.dumps. If you're using a language that doesn't have such functionality built in, you can probably find a JSON parsing and encoding library to use. If you simply use language or library functions to convert things to and from JSON, you'll never even need to know JSON's escaping rules. This is what the misguided question asker here ought to have done.

like image 122
Mark Amery Avatar answered Sep 23 '22 15:09

Mark Amery