2016-09-25 3 views
2

ich einen Tag weicht habe ein Datenobjekt wie folgt enthält:analysiert andstringify ein JSON-Objekt jquery

<a class="export-json" data-button="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]">Export json</a> 

Diese Werte basieren auf Daten-Taste wie folgt geführt:

$(".export-json").attr("data-button", data); 

data ist eine Liste welche enthält json.

Daten ist wie folgt:

[{ 
name: "John", 
position: "663", 
a: 15, 
b: 48 
}, 
{ 
name: "311", 
position: "663", 
a: 12, 
b: 48 
}] 

Deshalb möchte ich, dass die Daten-Objekt konvertieren und es als JSON-Datei herunterladen.

$(".export-json").click(function(){ 
     var data = $.parseJSON($(this).attr('data-button')); 
     exportJson(this, data); 
    }); 

function exportJson(element, data) { 
    var results = "text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(data)); 
    element.setAttribute("href", "data:"+results); 
    element.setAttribute("download", "data.json"); 
} 

Wenn ich so tun, weil dies parseJSON hier $.parseJSON($(this).attr('data-button')) ich:

Uncaught SyntaxError: Unexpected token o in JSON at position 1 

Wenn ich entferne die parseJSON, wenn ich die Datei herunterladen Ich habe dies:

"[object Object],[object Object],[object Object],[object Object],[object Object]" 

Ich weiß nicht, warum das passiert?

Wenn ich durch die Daten gehen alles corectly gedruckt:

for (var i = 0; i < data.length; i++) { 
    var item = data[i]; 
    console.log(item); 
} 

mir jemand statt

+1

Wie war 'data-button' an erster Stelle? – Hydrothermal

+0

'[Objekt Objekt]' ist nicht JSON. Es ist das Ergebnis eines Aufrufs von 'toString()' an zufälligen Objekten, aber es kann offensichtlich nicht zu einem tatsächlichen Objekt zurückkonvertiert werden. Wie kommst du tatsächlich zu diesem Wert in diesem Attribut, und was versuchst du eigentlich damit zu tun? – jcaron

+0

Sie müssen das 'JS-Objekt' analysieren, wenn das Anker-Tag ursprünglich generiert wurde, andernfalls werden Objektdaten als' [Objekt Objekt] ' – Derek

Antwort

1

Verwendung jQuery data() Methode helfen bitte attr()

Wechsel:

$(".export-json").attr("data-button", data) 

An:

$(".export-json").data("button", data) 

Dann wird es als Array gespeichert werden und wird keine Analyse erfordern

Wenn Sie wirklich dieses Attribut in einer benötigt würde müssen Sie zuerst das Array stringify vor als Attributwert zuweisen

Verwandte Themen