views:

148

answers:

2

I receive a JSON response in an Ajax request from the server. This way it works:

{ "a" : "1", "b" : "hello 'kitty'" }

But I did not succeed in putting double quotes around kitty.

When I convert " to \x22 in the Ajax response, it is still interpreted as " by JavaScript and I cannot parse the JSON.

Should I also escape the \ and unescape later (which would be possible)?

How to do this?

Edit: I am not sure if i expressed it well: I want this string inside of "b" after the parse:

hello "kitty"

If necessary I could also add an additional step after the parse to convert "b", but I guess it is not necessary, there is a more elegant way so this happens automatically?

Edit2: The ajax page is generated by php. I tried several things now to create the value of b, all result in JSON parse error on the page:

  $b = 'hello "kitty"';      

  // no 1:
  //$b = str_replace('"',"\x22",$b);

  // or no 2:
  // $b = addslashes($b);  

  // or no 3: 
  $b = str_replace('"','\"',$b);

  echo '{ "a" : "1", "b" : "' . $b . '"}';

Edit3: This solution finally works:

$b = 'hello "kitty"';      
$b = str_replace('"','\\"',$b); 
echo '{ "a" : "1", "b" : "' . $b . '"}';
+1  A: 

Just escape it with a backslash:

> JSON.stringify({"a": 5, "b": 'a "kitty" mighty odd'})
{"a":5,"b":"a \"kitty\" mighty odd"}
> JSON.parse('{"a":5,"b":"a \\"kitty\\" mighty odd"}')
Object
  a: 5
  b: a "kitty" mighty odd
  __proto__: Object

JSON parsers recognize \" inside double-quoted strings as a double quote. Note that in the second example, the double-backslash is needed because there's a Javascript parser pass, then another JSON parser pass.

Max Shawabkeh
thanks a lot! you save my day. this works for me now: $b = str_replace('"','\\"',$b); - karlthorwald - aka
@user89021: please read the bit about escaping backslashes too.
bobince
+1  A: 

use just json_encode (any PHP element ), it will automatically parses.

mahesh
yeah, but my php version is to old, ubuntu hardy does not have it yet, only PHP 5.2.4-2ubuntu5.10 here - karthorwald - aka
i will check again, because 5.2 should have it. last time it wasn't there :o