Нашел
отличный js который конвертирует XML в JSON на лету.
Скрипт быстро выполняет свою задачу но результат виден только в браузере.
Как отобразить результат в самой странице в json формате, чтобы можно было дальше с ним работать?
Спасибо!
var xml = (function() {
/*
<?xml version="1.0" encoding="UTF-8" ?>
<Results>
<show>
<showid>2930</showid>
<name>Buffy the Vampire Slayer</name>
<link>http://www.tvrage.com/Buffy_The_Vampire_Slayer</link>
<country>US</country>
<started>Mar/10/1997</started>
<ended>May/20/2003</ended>
<seasons>7</seasons>
<status>Ended</status>
<runtime>60</runtime>
<classification>Scripted</classification>
<genres><genre>Action</genre><genre>Adventure</genre><genre>Comedy</genre><genre>Drama</genre><genre>Horror/Supernatural</genre><genre>Mystery</genre><genre>Sci-Fi</genre></genres>
<network country="US">UPN</network>
<airtime>20:00</airtime>
<airday>Tuesday</airday>
<akas><aka country="SE">Buffy & vampyrerna</aka><aka country="DE">Buffy - Im Bann der Dämonen</aka><aka country="NO">Buffy - Vampyrenes skrekk</aka><aka country="HU">Buffy a vámpírok réme</aka><aka country="FR">Buffy Contre les Vampires</aka><aka country="IT">Buffy l'Ammazza Vampiri</aka><aka country="PL">Buffy postrach wampirów</aka><aka country="BR">Buffy, a Caça-Vampiros</aka><aka country="PT">Buffy, a Caçadora de Vampiros</aka><aka country="ES">Buffy, Cazavampiros</aka><aka country="HR">Buffy, ubojica vampira</aka><aka country="FI">Buffy, vampyyrintappaja</aka><aka country="EE">Vampiiritapja Buffy</aka><aka country="IS">Vampírubaninn Buffy</aka><aka country="RU">Баффи – истребительница вампиров</aka></akas>
</show>
<show>
<showid>31192</showid>
<name>Buffy the Vampire Slayer - Season Eight: Motion comics</name>
<link>http://www.tvrage.com/shows/id-31192</link>
<country>US</country>
<started>Jul/19/2010</started>
<ended>Nov/22/2010</ended>
<seasons>1</seasons>
<status>Canceled/Ended</status>
<runtime>15</runtime>
<classification>Animation</classification>
<genres><genre>Animation General</genre><genre>Action</genre><genre>Adventure</genre><genre>Comedy</genre><genre>Drama</genre><genre>Horror/Supernatural</genre><genre>Sci-Fi</genre></genres>
<network country="US">iTunes</network>
<airtime>12:00</airtime>
<airday>Tuesday</airday>
</show>
<show>
<showid>2931</showid>
<name>Buffy the Animated Series</name>
<link>http://www.tvrage.com/Buffy_the_Animated_Series</link>
<country>US</country>
<started>2002</started>
<ended></ended>
<seasons>1</seasons>
<status>Pilot Rejected</status>
<runtime>4</runtime>
<classification>Animation</classification>
<genres><genre>Animation General</genre><genre>Action</genre><genre>Adventure</genre><genre>Horror/Supernatural</genre></genres>
<network country="US">FOX</network>
<airtime>12:00</airtime>
<airday>Tuesday</airday>
</show>
</Results>
*/
}).toString().split('\n').slice(2, -2).join('\n').trim();
var oParser = new DOMParser();
var xml = oParser.parseFromString(xml, "text/xml");
// Changes XML to JSON
function xmlToJson(xml) {
// Create the return object
var obj = {};
if (xml.nodeType == 1) { // element
// do attributes
if (xml.attributes.length > 0) {
//obj["attributes"] = {};
for (var j = 0; j < xml.attributes.length; j++) {
var attribute = xml.attributes.item(j);
//obj["attributes"][attribute.nodeName] = attribute.nodeValue;
obj['@' + attribute.nodeName] = attribute.nodeValue;
}
}
} else if (xml.nodeType == 3) { // text
obj = xml.nodeValue.trim(); // add trim here
}
// do children
if (xml.hasChildNodes()) {
for (var i = 0; i < xml.childNodes.length; i++) {
var item = xml.childNodes.item(i);
var nodeName = item.nodeName;
// console.debug('child',nodeName,item)
if (typeof(obj[nodeName]) == "undefined") {
var tmp = xmlToJson(item);
if (tmp !== "") // if not empty string
obj[nodeName] = tmp;
} else {
if (typeof(obj[nodeName].push) == "undefined") {
var old = obj[nodeName];
obj[nodeName] = [];
obj[nodeName].push(old);
}
var tmp = xmlToJson(item);
if (tmp !== "") // if not empty string
obj[nodeName].push(tmp);
}
}
}
if (!Array.isArray(obj) && typeof obj == 'object') {
var keys = Object.keys(obj);
if (keys.length == 1 && keys[0] == '#text') return obj['#text'];
if (keys.length === 0) return null;
}
return obj;
}
var obj =xmlToJson(xml);
console.clear();
console.debug(obj);
document.getElementById('pre').innerHTML=JSON.stringify(obj,null,' ');
Как я получал данные из JSON
public function getMarket($period, $page)
{
$items = [];
$response = (array)@json_decode($this->request('GET', 'https://site.ru/json/my?duration=' . $period . '&page=' . $page)['body'], true);
foreach ($response as $key => $item) {
$item['user'] = $this->getUser($item['userId']);
$items[] = new MyItem($item);
}
return $items;
}
Перевод объекта JavaScript в строку JSON осуществляется с помощью метода JSON.stringify().
Данный метод осуществляет действие обратное методу
JSON.parse().
Пример:
var personString = JSON.strigify(person);
Реализовать на практике не смог.