2014-09-05 1 views
1

Так я борющийся с JSON на некоторое время теперь, однако прошлой ночью что-то странное случилось, даже Тхо я "спасся это вызывает ошибку, вот моя JSON строкиJson разбор терпит неудачу из синего

var data = $.parseJSON('{"rows":[{"type":"row","width_class":"row new_row","column_class":"col3 column_model","columns":{"0":{"class":"column one","children":[]},"1":{"class":"column one","children":[{"type":"bullet-block","html":"<div class=\\"bullet-block-element\\"><ul><li style='padding-left:36px;background-image:url(\\"http://example.com/includes/images/bulletins/large-0.png\\");'>123</li><li style='padding-left:36px;background-image:url(\\"http://example.com/includes/images/bulletins/large-0.png\\");'>456</li><li style='padding-left:36px;background-image:url(\\"http://example.com/includes/images/bulletins/large-0.png\\");'>789</li></ul></div>","image":"http://example.com/includes/images/bulletins/large-0.png","size":"large","items":["123","456","789"]}]},"2":{"class":"column one","children":[]}}}]}'); 

Это генерируется с помощью

var data = $.parseJSON('<?= str_replace('\\','\\\\',base64_decode($data['d'])) ?>'); 

я просто слеп или у меня было слишком много RedBull? Помощь была бы оценена!

ответ

1

json_encode делает маскирование и он автоматически будет выставлен как JSON, вы не нужный $.parseJSON, там двойной декодирование.

Просто используйте:

<?php 
$php = array('test' => 'hi'); 

$data['d'] = base64_encode(json_encode($php)); // 'eyJ0ZXN0IjoiaGkifQ==' 

?> 


<script> 

var data = <?php echo base64_decode($data['d']); ?>; 
console.debug(data.test); // Prints 'hi' in the console ;-) 

</script> 

Смотрите codepad: http://codepad.org/VmKGt0JD

+0

, которые назначат строку JSON для переменной данных, однако мне нужны данные, чтобы фактически быть объектом json? –

+0

Примечание: в PHP нет кавычек, это не будет строка, это фактические данные. – DanFromGermany

+1

Вы узнаете что-то новое каждый день, спасибо! –

0

вам нужно бежать ' «s, а также (s tyles в HTML-теги)

так что это будет работать

var data = $.parseJSON('{"rows":[{"type":"row","width_class":"row new_row","column_class":"col3 column_model","columns":{"0":{"class":"column one","children":[]},"1":{"class":"column one","children":[{"type":"bullet-block","html":"<div class=\\"bullet-block-element\\"><ul><li style=\'padding-left:36px;background-image:url(\\"http://example.com/includes/images/bulletins/large-0.png\\");\'>123</li><li style=\'padding-left:36px;background-image:url(\\"http://example.com/includes/images/bulletins/large-0.png\\");\'>456</li><li style=\'padding-left:36px;background-image:url(\\"http://example.com/includes/images/bulletins/large-0.png\\");\'>789</li></ul></div>","image":"http://example.com/includes/images/bulletins/large-0.png","size":"large","items":["123","456","789"]}]},"2":{"class":"column one","children":[]}}}]}');

скопировать и вставить в fiddle

+0

Howcome JSON.stringify не делает этого? –

+0

@SauliusAntanavicius Я еще не изучал это, [mdn] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify), если вы заинтересованы. Я обычно вручную избегаю всех (для этого есть встроенные функции на большинстве серверных языков) – Collett89

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