Home > Software design >  Why does JSON.stringify() \u30FC to ー
Why does JSON.stringify() \u30FC to ー

Time:04-27

I tried the code below:

console.log(JSON.stringify({ test: "\u30FCabc" }));

It gives the output below:

'{"test":"ーabc"}'

We know that mainly JSON.stringify() method converts a JavaScript object or value to a JSON string. And as per JSON std (https://www.json.org/json-en.html) we should be able to store \u30FC. Then why "\u30FC" is converted to "ー"?

CodePudding user response:

Then why "\u30FC" is converted to "ー" ?

  1. The JavaScript engine reads your string literal and does that conversion to create the in-memory string
  2. The object containing that string is passed to JSON.stringify
  3. JSON.stringify encodes the object as JSON and represents the as a literal because JSON.stringify was written in such a way to prefer literal characters over escape sequences where the JSON data format allows either.

Some JSON encoders let you control this, for example, in PHP, compare:

<?php echo json_encode('ーabc', JSON_UNESCAPED_UNICODE); ?>

and

<?php echo json_encode('ーabc'); ?>

… but JavaScript's JSON.stringify doesn't have any such option.

  • Related