2012-01-17 5 views
0

Я хочу напрямую преобразовать объект javascript в строку. Я использовал следующий код.Преобразование объекта Javascript в строку JSON

var foo = {}; 
foo.test1 = test1; 
foo.test2 = test2; 
foo.test3 = test3; 

var jsonObj = JSON.stringify(foo); 

Он отлично работает, но использует библиотеку json2 javascript. Однако мне нужно сделать это на простом javascript без использования каких-либо библиотек. Я знаю, что создание json-фида с использованием переданных параметров будет работать следующим образом.

var jsonObj = "{\"test1\":\"" + test1+ "\",\"test2\":\"" + test2+ "\",\"test3\":\"" + test3+ "\"}"; 

Однако, если переданные параметры (test1, test2 и test3) содержат двойные кавычки, у него будут проблемы.

Каков наилучший подход для достижения этого?

Спасибо

+1

Почему вы не можете использовать библиотеку? Особенно один такой маленький и особый, как json2.js. – Quentin

+1

Действительно, вы даже можете использовать мини-версию json2.js вместе с другим кодом, вам не нужно хранить ее в отдельном файле. –

+0

Вам не нужно включать json2.js, если вы не планируете поддерживать очень старые браузеры (или браузеры, созданные по-прежнему в 2001 году). – techfoobar

ответ

2

Вы должны избежать двойные кавычки, выполняя String.replace(/"/g, "\\\"") на каждый ключ и член. Однако для этого вам нужно гарантировать, что в вашем объекте JS будут только простые строки/номера.

FYI, следует отметить, что библиотека json2 будет использоваться только тогда, когда нативная реализация JSON не существует; all modern browsers поддерживают JSON (IE < 8 является примечательным исключением).

+1

Ошибка, если строка содержит новую строку – Quentin

+2

Почему вы избегаете двойных кавычек в регулярном выражении? Они не имеют никакого особого значения там, поэтому просто добавляется линейный шум. – Quentin

+1

@Quentin: Потому что это была строка раньше, и я забыл удалить ее, когда я изменил ее на регулярное выражение;) – Matt

1

Я думаю, вы совершенно не поняли, что такое JSON. JSON Стенды для обозначения объектов Javascript.

Что вы еще не поняли, так это то, что foo - это уже объект, и вы действительно думали о том, что вы хотите кодировать для доступа jsonObj?

Подсказка: jsonObj.test1: выглядит знакомым.

Возможно, вы пытаетесь создать строку, похожую на содержимое JSON, но на самом деле не объект. Это другой вопрос.

Надеюсь, это поможет.

+0

Да, я пытаюсь создать строку вроде json – Dilshan

+1

, так что могу предположить, что вы не будете использовать 'jsonObj' как объект? Вы будете просто печатать его на экране или что-то еще? – T9b

+0

Мне нужно прочитать свойства – Dilshan

Смежные вопросы