2013-08-01 35 views
0

我試圖解析JSON格式的字典列表,以便我可以使用他們的數據創建一組列表項,其中使用此數據生成文本和ID。我通過以下到我的網頁,並在一個隱藏的div積攢它服務之前:如何使用Javascript將字典列表解析爲JSON格式?

[{'text': 'org1', 'id': 'org1ID'}, 
    {'text': 'org2', 'id': 'org2ID'}, 
    {'text': 'org3', 'id': 'org3ID'}] 

我做這種方式,因爲數據可以通過執行查找被添加到客戶端上ajax和相同的UI元素將能夠使用基於訂閱的觀察者可觀察模型來查看不同的數據集。

螢火蟲表明它的成功呈現爲:

<div id="selection">[{'text': 'org1', 'id': 'org1ID'}, 
        {'text': 'org2', 'id': 'org2ID'}, 
        {'text': 'org3', 'id': 'org3ID'}]</div> 

當我在這個div的內容嘗試JSON.parse()來的問題開始。我得到以下信息:

JSON.parse: expected property name or '}' 

如果我刪除JSON.parse()來我得到li元素的列表,但未定義的值,並將它們的數量不匹配,期望之一:

<li id="Undefined">Undefined</> <!-- Repeated a number of times equal to char lengh of div html --> 

請注意,如果上面還沒有告訴你,我正在嘗試迭代我的列表並從每個字典中提取信息。

我也對數據試圖JSON.stringify()解析過,但只似乎將數據轉換成字符串,這樣看,當我步:

"[{'text': 'org1', 'id': 'org1ID'}, {'text': 'org2', 'id': 'org2ID'}, {'text': 'org3', 'id': 'org3ID'}]" <!-- The difference is that double qoutes have been injected. --> 

爲了使問題更加至少對我來說,至少是令人討厭的是,如果我實際上對這些數據的關聯數組部分進行了硬編碼(就像Javascript會看到的那樣),那麼它就能正常工作。然而,爲了做到這一點,我必須妥協我當前設計的很多靈活性。除了更多的客戶端處理外,最突出的缺點是無法將我的數據結構從服務器傳回。

任何人都可以提供一些見解,或者我可能忽略的解決方案?這是js中使用JSON的常見問題嗎?

UPDATE

我發現,之所以硬編碼原理不同的是,Python或Jinja2的是將我的數據結構使用單引號代替雙,但進入它在客戶端上繞過蟒蛇。在這一點上,我相信它是python在日食中顯示單引號列表的字典。

回答

3

有效的JSON字符串直接表示一個javascript數組/對象,根本不需要任何解析。就在這個輸出直接向JavaScript變量裏面的腳本標籤:

<script> 
var json_array = [{'text': 'org1', 'id': 'org1ID'}, 
    {'text': 'org2', 'id': 'org2ID'}, 
    {'text': 'org3', 'id': 'org3ID'}]; 
</script> 

你的數據會自動在JavaScript陣列,不需要解析。

+1

加上它甚至可以用單引號工作。 –

+0

如果我刪除JSON.parse和JSON.stringify語句並遍歷集合,它仍將它視爲一個字符串,因此它將依次遍歷每個字符。我將它存儲在div中,然後在js中使用:$('div').html()有什麼我需要做的,以阻止這是一個字符串? – Nickel

+0

是的。不要輸出到HTML。如答案中所述,將其直接輸出到一個javascript變量中。 –