2012-08-07 78 views
0

我解析具有這種功能的XML文件:從JSON對象,除去多餘的括號和數據 - 的Javascript

function xmlToJson(xml) { 
    var attr, child, attrs = xml.attributes, 
     children = xml.childNodes, 
     key = xml.nodeType, 
     obj = {}, 
     i = -1, 
     o = 0; 
    if (key == 1 && attrs.length) { 
     obj[key = o] = {}; 
     while (attr = attrs.item(++i)) { 
      obj[key][attr.nodeName] = attr.nodeValue; 
     } 
     i = -1; 
    } else if (key == 3) { 
     obj = xml.nodeValue; 
    } 
    while (child = children.item(++i)) { 
     key = child.nodeName; 
     if (obj.hasOwnProperty(key)) { 
      if (obj.toString.call(obj[key]) != '[object Array]') { 
       obj[key] = [obj[key]]; 
      } 
      obj[key].push(xmlToJson(child)); 
     } else { 
      obj[key] = xmlToJson(child); 
     } 
    } 
    return obj; 
} 

解析在下面的字符串中的下一個文件的結果(透過JSON.stringify所示):

文件(不包括「<」字符因爲它的內容是不可見的話,但在我的文件中很明顯,我已經得到了他們):

?xml version="1.0" encoding="UTF-8" standalone="no"?> 
playlist> 
vid src="video/intro.mp4" type="video/mp4"/> 
vid src="video/intro.mp4" type="video/mp4"/> 
/playlist> 

JSON:

{"playlist":{"#text":["\n","\n","\n"],"vid":[{"0":{"src":"video/intro.mp4","type":"video/mp4"}},{"0":{"src":"video/intro.mp4","type":"video/mp4"}}]}} 

,但我需要的輸出只是:

[{"0":{"src":"video/intro.mp4","type":"video/mp4"}},{"0":{"src":"video/intro.mp4","type":"video/mp4"}}] 

很抱歉,如果noob問題,但我作爲新JS以JSON和我與他們的日子可用我的一隻手的手指數着。

在此先感謝。

編輯:已解決 - 我自己解決:不是粗魯不允許將對象轉換爲字符串,而是決定將其轉換爲'子字符串',然後再轉換剩餘的字符串。這是結果:

JSON.parse(JSON.stringify(jsonPlaylist).substring(44,JSON.stringify(jsonPlaylist).length-2)); 

假設jsonPlaylist是包含整個解析的XML文件中的字符串變種。

回答

1

php

$yourxmlstring = rtrim(ltrim($yourxmlstring, '{"playlist":{"#text":["\n","\n","\n"],"vid":'),"}}"); 

基本上,我所做的就是利用ltrimrtrim砍掉你不想要的東西。

js

str.replace(/{"playlist":{"#text":\["\\n","\\n","\\n"\],"vid":/,'').replace(/}+$/,''); 
+0

是的,我想類似的東西,但它需要我的JSON對象轉換爲字符串。事實是,我需要JSON對象繼續保持這種狀態,一個JSON對象(我只是使用JSON.stringify來顯示輸出並檢查它是否正確),以便稍後使用它。因此,我無法將其轉換爲字符串。 – 2012-08-07 11:04:14

+0

我想你現在已經想通了,stringify,replace,parse> use :) – Prasanth 2012-08-07 12:32:24