2014-11-25 6 views
1

Эй, ребята, мне действительно нужна помощь здесь.Как вытащить часть массива JSON?

Мой фид JSON дает мне это как ключ/значение пары:

"custom_fields":{"zn_meta_elements":["a:8:{s:7:\"sp_link\";a:2:{s:3:\"url\";s:0:\"\";s:6:\"target\";s:6:\"_blank\";}s:6:\"sp_col\";s:0:\"\";s:14:\"sp_show_social\";s:3:\"yes\";s:10:\"port_media\";a:1:{i:0;a:3:{s:20:\"dynamic_element_type\";s:10:\"port_media\";s:21:\"port_media_image_comb\";a:3:{s:5:\"image\";s:0:\"\";s:3:\"alt\";s:0:\"\";s:5:\"title\";s:0:\"\";}s:21:\"port_media_video_comb\";s:26:\"http:\/\/vimeo.com\/112591203\";}}s:15:\"page_title_show\";s:3:\"yes\";s:10:\"page_title\";s:0:\"\";s:13:\"page_subtitle\";s:0:\"\";s:20:\"zn_disable_subheader\";s:2:\"no\";}"]}

Переменная Я хочу, чтобы получить значение из является port_media_video_comb Так что я хочу, чтобы вытащить http:\/\/vimeo.com\/112591203\ часть и превратить его в полезный URL.

Код настоящее время я использую, чтобы вытащить информацию выглядит следующим образом:

jQuery.each(data.posts, function(i, item) { 
    html += '<li>'; 
    html += '<div class="entry"><img src="' + data.posts[i].thumbnail + '" width="50px" height="50px" style="float:left; padding-right: 5px;"><a href="' + data.posts[i].url +'" target="_blank">' + data.posts[i].title + '</a><br /><p>' + data.posts[i].date + '</div>' ; 
    html += '</li>'; 
}); 

бы я, как, data.posts[i].custom_fields.port_media_video_comb, но потом, как я убедиться, что он работает в качестве URL? Я собираюсь использовать его в теге .

Любая помощь приветствуется!


EDIT:

Хорошо, так что я использовал этот сайт: http://json.parser.online.fr/ Для того, чтобы помочь мне выяснить тип элемента, мне нужно, чтобы захватить.

я обнаружил, что я мог бы получить в строку, как это: data.posts[i].custom_fields.zn_meta_elements и что возвращает: "a:8:{s:7:\"sp_link\";a:2:{s:3:\"url\";s:0:\"\";s:6:\"target\";s:6:\"_blank\";}s:6:\"sp_col\";s:0:\"\";s:14:\"sp_show_social\";s:3:\"yes\";s:10:\"port_media\";a:1:{i:0;a:3:{s:20:\"dynamic_element_type\";s:10:\"port_media\";s:21:\"port_media_image_comb\";a:3:{s:5:\"image\";s:0:\"\";s:3:\"alt\";s:0:\"\";s:5:\"title\";s:0:\"\";}s:21:\"port_media_video_comb\";s:26:\"http:\/\/vimeo.com\/112591203\";}}s:15:\"page_title_show\";s:3:\"yes\";s:10:\"page_title\";s:0:\"\";s:13:\"page_subtitle\";s:0:\"\";s:20:\"zn_disable_subheader\";s:2:\"no\";}" Как строку.

Как я могу захватить только часть http: // ... в точку с запятой и превратить ее в URL-адрес. Url?

+0

Это не JSON. Это другая форма сериализации (возможно, PHP). Вам необходимо найти подходящий десериализатор и десериализовать в структуру данных, в которой вы можете читать данные, из которых вы хотите. –

+0

Почему бы вам просто не десериализовать эту строку, чтобы вы могли просто получить доступ к необходимым вам свойствам: custom_fields = JSON.parse (custom_fields); В этом весь смысл JSON: не нужно разбираться со строками, это объект! – frenchie

ответ

-1

Вам нужно только получить URL-адрес из очень длинной строки, чтобы вы могли использовать регулярное выражение для достижения этого. Вот код:

var s = "a:8:{s:7:\"sp_link\";a:2:{s:3:\"url\";s:0:\"\";s:6:\"target\";s:6:\"_blank\";}s:6:\"sp_col\";s:0:\"\";s:14:\"sp_show_social\";s:3:\"yes\";s:10:\"port_media\";a:1:{i:0;a:3:{s:20:\"dynamic_element_type\";s:10:\"port_media\";s:21:\"port_media_image_comb\";a:3:{s:5:\"image\";s:0:\"\";s:3:\"alt\";s:0:\"\";s:5:\"title\";s:0:\"\";}s:21:\"port_media_video_comb\";s:26:\"http:\/\/vimeo.com\/112591203\";}}s:15:\"page_title_show\";s:3:\"yes\";s:10:\"page_title\";s:0:\"\";s:13:\"page_subtitle\";s:0:\"\";s:20:\"zn_disable_subheader\";s:2:\"no\";}"; 
var expression = /[[email protected]:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[[email protected]:%_\+.~#?&//=]*)?/gi; 
var regex = new RegExp(expression); 
var url = s.match(regex)[0]; //"http://vimeo.com/112591203" 

JSFiddle

Вы можете ссылаться на эту StackOverflow статью о том, что регулярное выражение, чтобы использовать, чтобы найти URL. What is a good regular expression to match a URL?

+0

OP должен сосредоточиться на десериализации, а не на манипуляциях с регулярными выражениями. –

+0

Mike, "a: 8: {s: 7: \" sp_link \ "; a: 2: {s: 3: \" url \ "; s: 0: \" \ "; s: 6: \ "целевой \"; s: 6: \ "_blank \";} s: 6: \ "sp_col \"; s: 0: \ "\"; s: 14: \ "sp_show_social \"; s: 3: \ "да \"; s: 10: \ "port_media \"; а: 1: {я: 0; а: 3: {s: 20: \ "dynamic_element_type \"; s: 10: \ "port_media \"; s : 21: \ "port_media_image_comb \"; а: 3: {s: 5: \ "образ \"; s: 0: \ "\"; s: 3: \ "Alt \"; s: 0: \ "\ "; s: 5: \" название \ "; s: 0: \" \ ";} s: 21: \" port_media_video_comb \ "; s: 26: \" HTTP: \/\/vimeo.com \/112591203 \ ";}} s: 15: \" page_title_show \ "; s: 3: \" да \ "; s: 10: \" page_title \ "; s: 0: \" \ "; s: 13: \" page_subtitle \ "; s: 0: \" \ "; s: 20: \" zn_disable_subheader \ "; s: 2: \" no \ ";}" не является строкой json, так как вы можете ее десериализовать? – user2466202

+0

Кажется, это сериализация PHP, поэтому нужно будет десериализовать ее с помощью PHP, десериализовать с использованием javascript-реализации десриализации PHP, например http://phpjs.org/functions/unserialize/, или исправить сам API, чтобы фактически вернуть JSON (если это под его контролем). –

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