проанализировать список json в обратном порядке

Я вытащил список объектов из json-файла и проанализировал их, как я их хочу. Единственная проблема заключается в том, что я хочу, чтобы они отображались в обратном порядке в HTML Doc. Пример списка json.

{ "s1":{ "date":"date1", "iconSrc":"image/icon.png", "audioSrc":"../audio_files/1.mp3" }, "s2":{ "date":"date2", "iconSrc":"image/icon1.png", "audioSrc":"../audio_files/2.mp3" }, "s3":{ "date":"date3", "iconSrc":"image/icon2.png", "audioSrc":"../audio_files/3.mp3" } } 

Пример скрипта в HTML Док. Текущий скрипт дает результаты, которые отображаются следующим образом

s1 s2 s3 Но мне нужно достичь s3 s2 s1

  function ajax_get_json(){ var hr = new XMLHttpRequest(); hr.open("GET", "sList.json", true); hr.setRequestHeader("Content-type", "application/json", true); hr.onreadystatechange = function() { if(hr.readyState == 4 && hr.status == 200) { //Initialize the data parse from JSON file var data = JSON.parse(hr.responseText); //Initializes s and sets the destination location as s Id within HTML body var s = document.getElementById("s"); //Initialize serDate.innerHTML as null s.innerHTML = ""; //Loops all objects and data within the sermonList.json file for(var obj in data){ //Displays s dates, icon, anchors the audioSrc to the icon /* //WANT THESE ITEMS TO BE DISPLAYED FROM HIGHEST INDEX TO LEAST //s3, s2, s1 */ s.innerHTML += "Date: "+data[obj].date+" 
"; } } } hr.send(null); //Displays text while loading s.innerHTML = "requesting..."; }

Не существует определенного гарантированного порядка для свойств объекта, использующего for..in loop, но попробуйте следующее:

 var obj = { "s1":{ "date":"date1", "iconSrc":"image/icon.png", "audioSrc":"../audio_files/1.mp3" }, "s2":{ "date":"date2", "iconSrc":"image/icon1.png", "audioSrc":"../audio_files/2.mp3" }, "s3":{ "date":"date3", "iconSrc":"image/icon2.png", "audioSrc":"../audio_files/3.mp3" } }; var keys = Object.keys(obj).reverse(); for(i=0; i< keys.length; i++) { console.log(obj[keys[i]]); } 

скрипка

 function ajax_get_json() { var hr = new XMLHttpRequest(); hr.open("GET", "sList.json", true); hr.setRequestHeader("Content-type", "application/json", true); hr.onreadystatechange = function () { if (hr.readyState == 4 && hr.status == 200) { //Initialize the data parse from JSON file var data = JSON.parse(hr.responseText); //Initializes s and sets the destination location as s Id within HTML body var s = document.getElementById("s"); //Initialize serDate.innerHTML as null s.innerHTML = ""; //Loops all objects and data within the sermonList.json file var keys = Object.keys(obj).reverse(); for (i = 0; i < keys.length; i++) { var obj = data[keys[i]]; //Displays s dates, icon, anchors the audioSrc to the icon /* //WANT THESE ITEMS TO BE DISPLAYED FROM HIGHEST INDEX TO LEAST //s3, s2, s1 */ s.innerHTML += "Date: " + obj.date + " 
"; } } } hr.send(null); //Displays text while loading s.innerHTML = "requesting..."; }

попробуй:

 var jsonarray = json.split(','); var reversejson = "" for(var i=jsonarray.lenght;i>0;i--){ reversejson += jsonarray[i]; } 

его близкий подход, не работает 100%, но его близок.

Прежде чем разделить его, вам нужно отделить {}.

Просто строит строку назад.

 var html_string = ''; for(var obj in data) { var current_string = html_string; html_string = "Date: "+data[obj].date+" 
" + current_string; } s.innerHTML = html_string;

Кстати, я должен добавить, что это не очень хороший подход. Вы должны рассмотреть возможность правильного сортировки json-контента при его отправке, вместо того, чтобы изменять его при получении. Это не считается хорошим программированием.

Объекты не имеют порядка. Но, к счастью, ваши ключи, похоже, названы по порядку.

Преобразование его в массив:

 var obj = { "s1":{ "date":"date1", "iconSrc":"image/icon.png", "audioSrc":"../audio_files/1.mp3" }, "s2":{ "date":"date2", "iconSrc":"image/icon1.png", "audioSrc":"../audio_files/2.mp3" }, "s3":{ "date":"date3", "iconSrc":"image/icon2.png", "audioSrc":"../audio_files/3.mp3" } }; var arr = []; for(var i in obj) arr[+i.substring(1)] = obj[i]; arr = arr.filter(function(i) { return i || false; }); // arr is now : [s1 Object, s2 Object, s3 Object] 

Теперь вы можете перебирать массив со спины …

Вы должны иметь возможность сделать это без сортировки, если все ваши записи сохраняют ключи s1, s2, как в вашем примере, и вы добавляете счетчик к вашему объекту

 var obj = { "items":"3", "s1":{ "date":"date1", "iconSrc":"image/icon.png", "audioSrc":"../audio_files/1.mp3" }, "s2":{ "date":"date2", "iconSrc":"image/icon1.png", "audioSrc":"../audio_files/2.mp3"}, "s3":{ "date":"date3", "iconSrc":"image/icon2.png", "audioSrc":"../audio_files/3.mp3" } }; var size = obj.items; for(var i = size; i > 0; i--) { var item = obj['s'+i]; // do something with item.date, item.iconSrc... }