Ваша строка не является допустимой JSON, поэтому JSON.parse
(или jQuery $.parseJSON
) не будет работать.
Один из способов - использовать eval
для "разбора" "неверного" JSON, а затем stringify
для его "преобразования" в действительный JSON.
var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }"
str = JSON.stringify(eval('('+str+')'));
Я предлагаю вместо того, чтобы пытаться "исправить" неверный JSON, вы начинаете с правильного JSON. Как генерируется str
, это должно быть исправлено там, до того, как будет сгенерировано, а не после.
РЕДАКТИРОВАТЬ : Вы сказали (в комментариях), что эта строка хранится в атрибуте данных:
<div data-object="{hello:'world'}"></div>
Я предлагаю вам исправить это здесь, так что это может быть просто JSON.parse
d. Во-первых, оба ключа и значения должны быть заключены в двойные кавычки. Он должен выглядеть следующим образом (допустимые атрибуты в кавычках в HTML действительны):
<div data-object='{"hello":"world"}'></div>
Теперь вы можете просто использовать JSON.parse
(или jQuery $.parseJSON
).
var str = '{"hello":"world"}';
var obj = JSON.parse(str);