2012-02-02 86 views
2

我有一個C#方法,它會生成Google圖表需要的JSON字符串。這樣的輸出看起來有點像這樣:生成Google Chart JSON數組

[ [{ v: 'Mike', f: 'Mike' }, '', 'The President'], [{ v: 'Jim', f: 'Jim Vice President' }, 'Mike', 'VP'], ['Alice', 'Mike', ''], ['Bob', 'Jim', 'Bob Sponge'], ['Carol', 'Bob', ''] ] 

我正在嘗試從使用getJSON我的JavaScript內這些數據,並返回一個JsonResult的方法。但是,Javascript會(正確)不會將它解析爲數組,因爲我正在使用字符串。

我該如何克服這個問題?我想我應該從數組中生成我的C#JsonResult,因爲這是數據。然而,谷歌的格式不完全適合這...

在此先感謝。

+1

這不是有效的JSON字符串。雙引號需要圍繞鍵和字符串值。 – 2012-02-02 00:27:53

+1

...如果您提到的'getJSON'是jQuery的,它會自動爲您解析字符串,但它必須是有效的。 – 2012-02-02 00:29:00

+1

這就是問題所在;谷歌圖表似乎堅持這種特定的格式。也許我將不得不繼續生成它作爲一個字符串,但我怎麼能然後將其轉換爲我的Javascript中的數組? – Jonathan 2012-02-02 00:30:51

回答

2

如果文本不能進行有效的JSON,您可能需要使用eval ...

var arr = eval(response_string); 

還是有它使用Function構造eval'd ...

var arr = Function('return ' + response_string)(); 

...但在這兩種情況下,請確保您信任正在發送的數據。


這兩種技術都會將字符串評估爲JavaScript代碼,因此只要JavaScript語法有效,就會發送任何內容。

0

getJSON將解析您的方法返回的「字符串」結果。但是,如果您要返回帶有字符串的JsonResult作爲您的參數,則只需編碼該字符串,然後在客戶端將其解析爲字符串。

如果要返回一個對象數組,然後將一個對象數組設置爲Data參數,它將自動序列化爲JSON。

1

documentation

重要:對於jQuery 1.4,如果JSON文件包含語法錯誤,請求通常會失敗默默。出於這個原因避免頻繁手動編輯JSON數據。 JSON是與那些比javascript的對象文字符號

的嚴格作爲一個評論者指出的那樣,你的JSON是無效的語法規則的數據交換格式。這:

[ [{ v: 'Mike', f: 'Mike' }, .... 

應該是:

[ [{ "v": "Mike", "f": "Mike" }, .... 

另外,還要確保您的JSON是不小心在"字符包圍。您可以測試JSON字符串的有效性here

一旦你做到了這一點,傳遞給你的回調data應該是你正在尋找的數組:

$.getJSON('url.json', function(data) { 
    // data is the array you're looking for 
}); 

如果你的問題是,你需要生成的對象轉換成Charts API的字符串,請看JSON.stringify()。如果您需要支持不實現它的瀏覽器,則可以找到鏈接here的實現。

0

都說 「S」 是返回的字符串,x將包含JavaScript對象:

var s = "[ [{ v: 'Mike', f: 'Mike' }, '', 'The President'], [{ v: 'Jim', f: 'Jim Vice President' }, 'Mike', 'VP'], ['Alice', 'Mike', ''], ['Bob', 'Jim', 'Bob Sponge'], ['Carol', 'Bob', ''] ]" 
var x = eval("y=" + s)