2014-01-09 179 views
1

我不知道爲什麼這不顯示任何東西。我正在嘗試獲取var txt中的信息以在html中動態生成!json對象javascript混淆

function byId (id) { 
    return document.getElementById(id); 
} 

var txt = '{"characters":[' + 
'{"fullName":"John Doe","speci":"human male","occup":"Web Personality","cide":"Sleeper","descr":"blah","biog":"blarg","allia":"chaos good" },' + 
'{"fullName":"Jane Doe","speci":human female",occup":"Movie Producer","cide":"Citric","descr":"bluh","biog":"blurg","allia":"neutral" },' + 
'{"fullName":"Canter Doma","speci":alien male",occup":"Chef","cide":"Galv","descr":"bleh","biog":"blerg","allia":"evil" }]}'; 

var obj = eval ("(" + txt + ")"); 

byId("fname").innerHTML = obj.characters[1].fullName; 
byId("spec").innerHTML = obj.characters[1].speci; 
byId("occu").innerHTML = obj.characters[1].occup; 
byId("cid").innerHTML = obj.characters[1].cide; 
byId("desc").innerHTML = obj.characters[1].descr; 
byId("bio").innerHTML = obj.characters[1].biog; 
byId("alli").innerHTML = obj.characters[1].allia; 

我有一個測試鏈接在這裏。 http://jsfiddle.net/KLer3/

+1

你檢查語法錯誤?嘗試運行http://jsonlint.com/並使用'JSON.parse()' – megawac

+0

http://jsfiddle.net/KLer3/2/我修復了語法錯誤,但它仍然不起作用 – riotgear

+1

JavaScript字符串無法跨越多行。一定要檢查你的JS控制檯是否有錯誤。 –

回答

1

如果您不使用eval,這可能會更好。

您錯過了佔領和外星人報價。

{ 
"characters":[ 
    { 
    "fullName":"John Doe", 
    "speci":"human male", 
    "occup":"Web Personality", 
    "cide":"Sleeper", 
    "descr":"blah", 
    "biog":"blarg", 
    "allia":"chaos good" 
    }, 
    { 
    "fullName":"Jane Doe", 
    "speci":"human female", 
    occup":"Movie Producer", 
    "cide":"Citric", 
    "descr":"bluh", 
    "biog":"blurg", 
    "allia":"neutral" 
    }, 
    { 
    "fullName":"Canter Doma", 
    "speci": "alien male", 
    "occup":"Chef", 
    "cide":"Galv", 
    "descr":"bleh", 
    "biog":"blerg", 
    "allia":"evil" 
    } 
]} 
+0

嗯,這是非常有用的,我確實知道最好的做法。只是在網上找到一個示例並運行它最後2件事我試圖逃脫出來添加一個圖像到我的數組,但它也打破了數組我怎麼寫這個,以便它吐出所有的字符到頁面上我正在學習,我不知道該怎麼稱呼一切。http://jsfiddle.net/mn9 LV/1/ – riotgear

+1

你正在嘗試跑步,然後才能走路。在開始像這樣的項目之前,閱讀一本好的JS書,例如「Javascript:The Good Parts」。還要考慮使用像JQuery這樣的庫來獲得更清晰的HTML處理代碼。 – slim

0

您的JSON中缺少引號。例如:

"speci":"human female",occup": "Movie Producer", 

...缺少「佔用」的開頭引用(並且還有更多類似的錯誤)。

修復這些和你的代碼的作品。

但是,使用eval()來解析JSON並不是一個好習慣,因爲它允許注入數據結構賦值以外的代碼。

使用JSON.parse()代替:

var obj = JSON.parse(txt); 

我假設你是用手工的方式來書寫實驗JSON字符串。不要在真實的代碼中做到這一點。在服務器端語言中使用JSON.stringify()或其等價物。

如果你真的想與您的代碼數據在線,你不需要JSON在所有 - 只是聲明它就地:

var obj = { characters: [ 
    {"fullName":"John Doe","speci":"human male", ... }, 
    {"fullName":"Jane Doe","speci":human female", ... }, 
    ... 
]}; 
0

你有缺失引號"多個語法錯誤 - 確保代碼正確假設你做錯了什麼之前寫的......否則好像它應該工作.. 。

+0

是的,是的!謝謝大家這正是我想到的。任何想法如何讓我的角色數組吐出來的數據在一次,如果我有30個不同的字符,並希望他們都顯示http://jsfiddle.net/mn9LV/ – riotgear

0

你的字符串應該是這樣的:

var txt='{' 
+ '"characters": [' 
+  '{' 
+   '"fullName": "John Doe",' 
+   '"speci": "human male",' 
+   '"occup": "Web Personality",' 
+   '"cide": "Sleeper",' 
+   '"descr": "blah",' 
+   '"biog": "blarg",' 
+   '"allia": "chaos good"' 
+  '},' 
+  '{' 
+   '"fullName": "Jane Doe",' 
+   '"speci": "humanfemale",' 
+   '"occup": "Movie Producer",' 
+   '"cide": "Citric",' 
+   '"descr": "bluh",' 
+   '"biog": "blurg",' 
+   '"allia": "neutral"' 
+  '},' 
+  '{' 
+   '"fullName": "Canter Doma",' 
+   '"speci": "alienmale",' 
+   '"occup": "Chef",' 
+   '"cide": "Galv",' 
+   '"descr": "bleh",' 
+   '"biog": "blerg",' 
+   '"allia": "evil"' 
+  '}' 
+ ']' 
+'}'; 

但如前所述的意見,這樣做解析b手並不是最好的做法。

1
  1. 只是一對夫婦的雙引號的缺失。
  2. 這部分:var obj = eval ("(" + txt + ")");沒有必要我把它設置爲 這var obj = txt;快速。

看看你的代碼:

立即查看您的代碼:http://jsfiddle.net/KLer3/6/