2016-11-29 4 views
1

У меня есть JSON на сервере AWS, с которым я обращаюсь. Использование JQuery и внутри этого json-файла - это несколько сотен объектов, которые я хочу пропустить и выбрать из них в случайном порядке. Затем получите атрибуты для этого объекта.Возврат Случайный объект JSON

Это JSON:

{ 
    "1":{ 
     "title":"Sailing for Kids", 
     "ISBN":"1909911267" 
}, 
    "2":{ 
     "title":"True Spirit: The Aussie girl who took on the world", 
     "ISBN":"413513243" 
}, 
.......... 

И это, как я пытаюсь получить объекты JSON.

$(document).ready(function(){ 
$.ajax({ 
    crossOrigin: true, 
    url : "https://link/to/file.json", 
    type : "GET", 
    success:function(data){ 
    var randomItem = data[Math.random() * data.length | 0]; 

     // take only the element with index 0 
     alert(randomItem[0]); 
    } 
}); 
}); 

Однако предупреждение содержит только один символ. как так:

enter image description here

Как перебрать все возвращенного JSON файл в файл, выберите один объект, а затем получить атрибуты (название/ISBN), так что я могу их использовать?

+0

1. То есть объект, вы получаете, а не массив, поэтому он не будет иметь ' длина' свойство. По крайней мере, не по умолчанию. 2. 'data.length | 0' - это побитовое ИЛИ есть. – vlaz

+0

@vlaz - '| 0' делает смысл - он делает результат целым числом –

+0

Вызов '$ .ajax' возвращает строку, а не объект. Затем он может быть изменен на объект с помощью 'JSON.parse()'. –

ответ

-2
[ 
{ 
    "1":{ 
    "title":"Sailing for Kids", 
    "ISBN":"1909911267"} 
}, 
{ 
"2":{ 
    "title":"True Spirit: The Aussie girl who took on the world", 
    "ISBN":"413513243"} 
} 
] 

вам, возможно, потребуется построить JSON, как описано выше

-2

Сначала я хотел бы сделать console.log(data) или даже console.log(data[1]), чтобы увидеть то, что я на самом деле получить. В зависимости от заголовков результат может быть отправлен как текст, а не объект. В этом случае вам нужно сделать data = JSON.parse(data)

И затем, чтобы получить фактическую длину объекта, как и было предложено, вы необходимо использовать Object.keys (данные), или вы можете упорядочить свои данные в массиве.

И если n является длиной, чем Math.floor(Math.random() * n), случайный в этом диапазоне.

EDIT: Не заботясь, Object.keys (data) - это массив ключей. Длина вам нужно, таким образом, Object.keys (данные) .length

EDIT 2:

var keys = Object.keys(data) 
var n = keys.length; 
var randomNumber = Math.floor(Math.random() * n); 
var randomKey = keys[randomNumber]; 
+0

ok, поэтому данные [1] возвращают 1 результат, который является удивительным. Object.keys (data) возвращает список всех ключей. Теперь ... эти клавиши пропускают, как 10,11,14,15,22, поэтому было бы лучше, если бы я добавил эти ключи, возвращаемые из Object.keys (data) в массив, а затем выберите их случайным образом. дать согласие? Также не знаете, как это сделать – JamesG

Смежные вопросы