2015-09-08 25 views
-3

我有一個文本文件名爲text.json它看起來像下面的一組JSON對象:使用JSON的JavaScript工作

{ 
    "school": [ 
    { 
     "student": { 
     "name": "John", 
     "lastname": "Ghram", 
     "studentId": "000111" 
     } 
    }, 
    { 
     "student": { 
     "name": "Harry", 
     "lastname": "Smith", 
     "studentId": "000112" 
    } 
    }, 
    { 
     "teacher": { 
     "name": "Teacher One", 
     "teacherId": 1001 
     } 
    } 
    ] 
} 

下面的代碼是從使用文件讀取

var obj = (function() { 
     var json = null; 
     $.ajax({ 
      'async': false, 
      'global': true, 
      'url': "text.json", 
      'dataType': "json", 
      'Content-type': 'application/json', 
      'success': function (data) { 
       obj = data; 
      } 
     }); 
     return obj; 
    })(); 

obj返回以獲取學生姓名時,我正在使用 obj.school[0].student['name']。 有沒有辦法將所有學生信息存儲爲一個名爲students的JSON對象,並將教師存儲爲其他名爲teachers,因此我可以在不使用索引編號的情況下訪問信息。例如:student.name

+1

可能重複[如何從異步調用返回響應?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call) – Mritunjay

+0

你有多個學生。不知怎的,你必須指出要訪問哪一個。他們聲稱訪問數據的方式與數據不匹配。另外,瞭解異步調用的工作方式。 –

+1

@Mritunjay:不,那與此無關。 –

回答

3

不,這正是陣列的用途。您不能將name屬性的多個實例存儲在一個對象上,這沒有任何意義。如果student代表多個學生,student.name可能會如何解析爲單個名稱?

+0

訪問學生數據的方式是什麼? – usrNotFound

+0

@ CannotFindSymbol我不能說,因爲你沒有在你的問題中包含有效的JSON。 – meagar

1

你只需要新的陣列來存儲它們,你可以這樣寫

function getStudents(obj) 
{ 
    var res = new Array() ; 
    var school = obj['school'] ; 
    for(item in school) 
    { 
     for(q in school[item]) 
     { 
      if(q=="student")//you can change it to "teacher" 
      { 
       res.push(school[item]) ; 
      } 
     } 
    } 
    console.log(res) ; 
    return res ;//return an array(object) of students; 
} 
getStudents(obj) ; 
1

功能我格式化你的JSON,然後申請一個循環來查找符合「學生」是對象鍵然後用名字增強學生對象。

如果兩個名字是一樣的,他們會被覆蓋,所以這是不是最好的方法:

var obj = { 
    "school": [ 
     {"student": { "name":"John", "lastname": "Ghram", "studentId": 000111 }}, 
     {"student": { "name": "Harry","lastname": "Smith", "studentId": 000112 }}, 
     {"teacher": { "name": "Teacher One", "teacherId": 1001 }} 
    ] 
}; 

var i, arr = obj.school, len = arr.length; 
var students = Object.create(null); 

for(i=0; i<len; i++) { 
    if(Object.keys(arr[i])[0] === 'student') students[arr[i].student.name] = arr[i]; 
} 

現在可以使用方括號標記:的

students['John'], students['Harry'], etc