2017-08-14 18 views
-1

我是Json和JavaScript的新手。目前我有一個url它返回一個JSON響應。但問題是,它的格式不正確。請參閱從上面的響應我下面如何解析非Json數據hemera

var pd={ player: 
    { id: 363609002, 
    game: 'bf4', 
    plat: 'pc', 
    name: 'm4jes', 
    tag: 'BPt', 
    dateCheck: 1487204427149, 
    dateUpdate: 1474581052618, 
    dateCreate: 1384980182606, 
    dateStreak: 1474581052618, 
    lastDay: '20160715', 
    country: '', 
    countryName: null, 
    rank: 
     { nr: 121, 
     imgLarge: 'bf4/ranks/r121.png', 
     img: 'r121', 
     name: 'Major General II', 
     needed: 16110000, 
     next: 
     { nr: 122, 
      imgLarge: 'bf4/ranks/r122.png', 
      img: 'r122', 
      name: 'Major General III', 
      needed: 16750000, 
      curr: 16720600, 
      relNeeded: 640000, 
      relCurr: 610600, 
      relProg: 95.40625 } }, 
    score: 16724643, 
    timePlayed: 1476950, 
    uId: '2832665149467333131', 
    uName: 'm4jes', 
    uGava: '721951facb53ed5632e196932fb6c72e', 
    udCreate: 1319759388000, 
    privacy: 'friends', 
    blPlayer: 'http://battlelog.battlefield.com/bf4/soldier/m4jes/stats/363609002/pc/', 
    blUser: 'http://battlelog.battlefield.com/bf4/user/m4jes/', 
    editable: false, 
    viewable: true, 
    adminable: false, 
    linked: false },} 

響應我得輸出爲:

{ 
    game: 'bf4', 
    plat: 'pc', 
    name: 'm4jes', 
    tag: 'BPt', 
    score: 16724643, 
    timePlayed: 1476950 
} 

通過這些方法,我可以得到在Javascript中需要進行

回答

1

首先把URL不返回JSON響應,而是返回JS對象文字。區別解釋here

您必須從網址獲取字符串。您可以使用jQuery的方法get()

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
<script> 
var jqxhr = $.get("https://api.bf4stats.com/api/playerInfo?plat=pc&name=m4jes&output=js", function() { 
    //Insert the rest of the code here 
}); 
</script> 

然後,jqxhr.responseText是對應於我們想要的對象的字符串。使用eval,我們將字符串轉換爲對象:

pd = eval(jqxhr.responseText); 

因此,在這裏我們有一個包含所有對的名稱/值的對象字面值。您可以使用點符號訪問所需的值。如果你想獲得遊戲的名稱,例如,你可以這樣寫:

pd.player.game 

所以這會導致:

var myNewObject = { 
    game: pd.player.game, 
    plat: pd.player.plat, 
    name: pd.player.name, 
    tag: pd.player.tag, 
    score: pd.player.score, 
    timePlayed: pd.player.timePlayed, 
} 

然後,你必須改變這個JS對象常量成JSON通過使用JSON.stringify() method

console.log(JSON.stringify(myNewObject, null, '\t')); 

它返回你想要什麼:

{ 
     "game": "bf4", 
     "plat": "pc", 
     "name": "m4jes", 
     "tag": "BPt", 
     "score": 16724643, 
     "timePlayed": 1476950 
    } 

因此,這裏是全碼:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
 
<script> 
 
var jqxhr = $.get("https://api.bf4stats.com/api/playerInfo?plat=pc&name=m4jes&output=js", function() { 
 
    pd = eval(jqxhr.responseText); 
 

 
    var myNewObject = { 
 
    game: pd.player.game, 
 
    plat: pd.player.plat, 
 
    name: pd.player.name, 
 
    tag: pd.player.tag, 
 
    score: pd.player.score, 
 
    timePlayed: pd.player.timePlayed, 
 
} 
 

 
console.log(JSON.stringify(myNewObject, null, '\t')); 
 
}); 
 
</script>

+0

感謝@hugues,但是當我安慰它的console.log(body.pd.player.game);「我得到錯誤信息爲「無法讀取屬性'播放器'的未定義 」爲什麼它是這樣的? –

+0

你爲什麼使用身體?嘗試「console.log(pd.player.game)」 – Hugues

+0

「pd未定義」是嘗試上面的代碼「console.log(pd.player.game)」後的錯誤信息。 –