2016-07-05 66 views
1

我有我從服務器下載到文件的內容,所以當我有多行json我無法下載文件我得到意想不到的令牌,我相信這個例外是因爲新行字符,我該如何解決這個問題?從服務器如何在json中有兩行時解決意外的令牌錯誤?

數據

{"level":"info","message":"Test Log messages"} 
{"level":"info","message":"Test Log messages"} 
{"level":"info","message":"Test Log messages"} 

ctrl.js

$scope.downloadFile = function(message){ 
     DitFactory.getFile(message).then(function(response,$window){ 
      var data = JSON.stringify(response.data); 
      var blob = new Blob([data], { type: 'text/plain;charset=utf-8' }); 
      FileSaver.saveAs(blob, 'text.txt'); 
      console.log(response); 
     }); 
    }; 

錯誤

angular.js:13708 SyntaxError: Unexpected token { in JSON at position 49 
    at Object.parse (native) 
    at fromJson 
+3

是一個數組中的這些對象呢?如果是這樣,需要用逗號分隔它們。 – developer033

+0

來自服務器的數據無效JSON,因此無法將其解析爲JSON。正如@ developer033所說,你可能想把這些對象放在一個JSON數組中 – rob

+0

我正在從服務器獲取文件名和內容 – hussain

回答

2

有效的JSON響應應該是這樣的:

[ 
    {"level":"info","message":"Test Log messages"}, 
    {"level":"info","message":"Test Log messages"}, 
    {"level":"info","message":"Test Log messages"} 
] 

更改您的服務器響應以返回有效值。

否則,分析這樣的,如果這是響應:

var response = '{"level":"info","message":"Test Log messages"}\n{"level":"info","message":"Test Log messages"}\n{"level":"info","message":"Test Log messages"}'; 


var items = response.split('\n'); 
items = items.filter(function(item) { 
    return item 
    }) 
    .map(function(item) { 
    return angular.fromJson(item); 
    }); 



console.log(items); 

在線演示 - https://plnkr.co/edit/H3tcxWqMUFep4n3LSt1C?p=preview

+0

感謝您的幫助,它使我更好地理解我需要修復的地方。再次感謝 – hussain

+0

對於肯定的朋友,請注意,如果您使用'$ http'模塊,並且服務器返回有效的json響應(標頭+內容),則angular會自動將json字符串解析爲對象。閱讀'$ http'模塊瞭解更多信息 –

相關問題