Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Преобразование строки в объект (https://javascript.ru/forum/misc/57828-preobrazovanie-stroki-v-obekt.html)

php-coder 21.08.2015 16:26

Преобразование строки в объект
 
Всем привет!!!

В общем в цикле генерирую строку вида '{"12": 150, "13": 150, "14": 100}'
Как мне после перегнать ее объект для передачи через ajax?

Для этой строки срабатывает JSON.parse, но если строка будет в виде "{'12': 150, '13': 150, '14': 100}" то объект не получается. Подскажите, почему? кавычка и двойная кавычка в js имеют же одинаковое значение. тогда в чем разница?

срабатывает eval, но пишут лучше ее не использовать.

Подскажите, как лучше и правильнее сделать?

tsigel 21.08.2015 16:35

php-coder,
потому что в JSON формате ковычки должны быть двойные.

Rise 21.08.2015 17:03

php-coder, можешь одинарные писать кавычки и вообще что угодно хоть тройные и назвать можешь формат в честь себя, если свои функции парсинга напишешь :D к javascript это никакого отношения не имеет, как и javascript к java, просто сделали такой формат строки для удобства и назвали JSON, и стали все люди им пользоваться и благодарить, и ввели поддержку сего формата встроенными функциями в языки, и возрадовались все.

ruslan_mart 22.08.2015 09:25

php-coder, юзай eval. Почему бы и нет? Ты же сам генерируешь данные, вряд ли ты какой-то зловещий код сгенерируешь.

Erolast 22.08.2015 13:15

Цитата:

кавычка и двойная кавычка в js имеют же одинаковое значение
В языке программирования JS - да. В формате JSON - нет. Используй двойные.

Только непонятно, зачем вообще сначала собирать строку, а потом эту строку переводить в объект (при том что реализующий ajax модуль все равно будет переводить объект в строку). Почему сразу не генерировать объект?

php-coder 24.08.2015 09:29

Цитата:

Сообщение от Erolast (Сообщение 385130)
В языке программирования JS - да. В формате JSON - нет. Используй двойные.

Только непонятно, зачем вообще сначала собирать строку, а потом эту строку переводить в объект (при том что реализующий ajax модуль все равно будет переводить объект в строку). Почему сразу не генерировать объект?

Все данные берутся из формы в которой, каждый раз разные поля. т.е. я заранее не знаю имена и количество свойств.

Если знаете вариант, подскажите, пожалуйста, как сразу объект генерировать.

В html форме вот такие инпуты
<input name="dataId[14]" value="100" type="text" />

их может быть разное количество. изменяется только value и число в name(в данном примере 14). Нужно чтобы php аяксом получил массив
[dataId] => Array
(
     [12] => 150
     [13] => 150
     [14] => 100
)

ksa 24.08.2015 09:47

Цитата:

Сообщение от php-coder
В html форме вот такие инпуты
<input name="dataId[14]" value="100" type="text" />


их может быть разное количество. изменяется только value и число в name(в данном примере 14). Нужно чтобы php аяксом получил массив

Как вариант...

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
<link rel="stylesheet/less" type="text/css" href="style.less">
<script src="http://cdnjs.cloudflare.com/ajax/libs/less.js/2.5.0/less.min.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
	var obj={'dataId': []};
	$('[name^="dataId"]').each(function(){
		obj.dataId.push(this.value);
	});
	alert(obj.dataId);
});
</script>
</head>
<body>
<form>
	<input name="dataId[0]" value="10" type="text" />
	<input name="dataId[1]" value="20" type="text" />
	<input name="dataId[2]" value="30" type="text" />
	<input name="dataId[3]" value="40" type="text" />
	<input name="dataId[4]" value="50" type="text" />
</form>
</body>
</html>

ksa 24.08.2015 09:59

Цитата:

Сообщение от php-coder
генерирую строку вида
'{"12": 150, "13": 150, "14": 100}'

Как вариант...

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
<link rel="stylesheet/less" type="text/css" href="style.less">
<script src="http://cdnjs.cloudflare.com/ajax/libs/less.js/2.5.0/less.min.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
	var obj={};
	$('[name^=dataId]').each(function(){
		var key=this.name.match(/\d+/);
		obj[key]=this.value;
	});
	console.log(obj);
});
</script>
</head>
<body>
<form>
	<input name="dataId[0]" value="10" type="text" />
	<input name="dataId[1]" value="20" type="text" />
	<input name="dataId[2]" value="30" type="text" />
	<input name="dataId[3]" value="40" type="text" />
	<input name="dataId[4]" value="50" type="text" />
</form>
</body>
</html>

php-coder 26.08.2015 09:29

ksa, спасибо, последний вариант - то что нужно.

laimas 26.08.2015 13:08

Цитата:

Сообщение от php-coder
Нужно чтобы php аяксом получил массив
[dataId] => Array
(
[12] => 150
[13] => 150
[14] => 100
)

Чем вам не устраивает seralise или serialiseArray?


Часовой пояс GMT +3, время: 10:21.